SPRNET-1102: Improve Northwind NHibernate example

This commit is contained in:
lahma
2009-07-27 20:24:32 +00:00
parent 0521f868bd
commit 2e2e60b26c
27 changed files with 934 additions and 68 deletions

View File

@@ -28,23 +28,31 @@
<section>
<title>Introduction</title>
<para>This QuickStart application uses the all too familiar Northwind
database and uses NHibernate browse and edit customers. It It is a very
simple application that directly uses the DAO layer in some cases and also
has a simple service layer that simulated a fullillment process. See the
integration tests as well for insight into how it works. The application
uses Spring's declarative transaction management features,
HibernateTemplate helper class, and Open Session In View module. <note>
The example will be updated to not use HibernateTemplate and instead use the standard NHibernate API in a future release. All functionality is still present when using the standard NHibernate API, as Spring transaction managment is integrated into NHibernate extension points and exception translation is provided by AOP advice. See the section titled Implementing DAOs based on plain Hibernate 1.2/2.0 API" in the hibernate orm section of the reference docs for more information.
</note>To run the application make the Web application the project that
starts and set Default.aspx as the start page. You will see a list of
customers. If you select 'edit' then you can edit some customer info and
save it by pressing the save button. Note that you will need to explicitly
navigate back to the Default.aspx page and reload it in order to see the
changes.<note>
<para>To follow this NHibernate QuickStart load the solution file
found in the directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.Data.NHibernate.Northwind</literal></para>
</note></para>
<para>
This QuickStart application uses the all too familiar Northwind
database and uses NHibernate browse and edit customers. It It is a very
simple application that directly uses the DAO layer in some cases and also
has a simple service layer that simulated a fullillment process. See the
integration tests as well for insight into how it works. The application
uses Spring's declarative transaction management features,
standard NHibernate API, and Open Session In View module.
<note>
Even though data access is performed through NHibernate API all Spring.NET provided functionality is
still present when using the standard NHibernate API, as Spring transaction managment
is integrated into NHibernate extension points and exception translation is
provided by AOP advice.
See the section titled Implementing DAOs based on plain Hibernate 1.2/2.0 API"
in the hibernate orm section of the reference docs for more information.
</note>
To run the application make the Web application the project that
starts and set Default.aspx as the start page.
<note>
<para>
To follow this NHibernate QuickStart load the solution file
found in the directory
<literal>&lt;spring-install-dir&gt;\examples\Spring\Spring.Data.NHibernate.Northwind</literal>
</para>
</note>
</para>
</section>
</chapter>

View File

@@ -0,0 +1,125 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Spring.Northwind.Web", "src\Spring.Northwind.Web\", "{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}"
ProjectSection(WebsiteProperties) = preProject
TargetFramework = "3.5"
ProjectReferences = "{53B04C54-63EA-45AA-BB83-8950AF3C5D68}|Spring.Aspects.dll;{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}|Spring.Northwind.Dao.dll;{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}|Spring.Northwind.Dao.NHibernate.dll;{9E15876F-E9E0-43B7-9874-B54F163757D6}|Spring.Northwind.Service.dll;{FD89FEBE-4914-45F3-9123-B2CB954810DD}|Spring.Northwind.Web.References.dll;"
Debug.AspNetCompiler.VirtualPath = "/Spring.Northwind.Web"
Debug.AspNetCompiler.PhysicalPath = "src\Spring.Northwind.Web\"
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\Spring.Northwind.Web\"
Debug.AspNetCompiler.Updateable = "true"
Debug.AspNetCompiler.ForceOverwrite = "true"
Debug.AspNetCompiler.FixedNames = "false"
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.VirtualPath = "/Spring.Northwind.Web"
Release.AspNetCompiler.PhysicalPath = "src\Spring.Northwind.Web\"
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\Spring.Northwind.Web\"
Release.AspNetCompiler.Updateable = "true"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
Release.AspNetCompiler.Debug = "False"
VWDPort = "17866"
DefaultWebSiteLanguage = "Visual C#"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Northwind.Service.2008", "src\Spring.Northwind.Service\Spring.Northwind.Service.2008.csproj", "{9E15876F-E9E0-43B7-9874-B54F163757D6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Northwind.Dao.2008", "src\Spring.Northwind.Dao\Spring.Northwind.Dao.2008.csproj", "{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Northwind.Dao.NHibernate.2008", "src\Spring.Northwind.Dao.NHibernate\Spring.Northwind.Dao.NHibernate.2008.csproj", "{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Northwind.IntegrationTests.2008", "test\Spring.Northwind.IntegrationTests\Spring.Northwind.IntegrationTests.2008.csproj", "{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Aspects.2008", "src\Spring.Aspects\Spring.Aspects.2008.csproj", "{53B04C54-63EA-45AA-BB83-8950AF3C5D68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.Northwind.Web.References.2008", "src\Spring.Northwind.Web.References\Spring.Northwind.Web.References.2008.csproj", "{FD89FEBE-4914-45F3-9123-B2CB954810DD}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|.NET = Debug|.NET
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Release|.NET = Release|.NET
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Debug|.NET.ActiveCfg = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Debug|.NET.Build.0 = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Debug|Any CPU.ActiveCfg = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Debug|Mixed Platforms.ActiveCfg = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Debug|Mixed Platforms.Build.0 = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Release|.NET.ActiveCfg = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Release|.NET.Build.0 = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Release|Any CPU.ActiveCfg = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Release|Mixed Platforms.ActiveCfg = Debug|.NET
{3E321CBC-75B0-45C4-AFEF-7CEED28368AE}.Release|Mixed Platforms.Build.0 = Debug|.NET
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Debug|.NET.ActiveCfg = Debug|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Release|.NET.ActiveCfg = Release|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Release|Any CPU.Build.0 = Release|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9E15876F-E9E0-43B7-9874-B54F163757D6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Debug|.NET.ActiveCfg = Debug|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Release|.NET.ActiveCfg = Release|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Release|Any CPU.Build.0 = Release|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Debug|.NET.ActiveCfg = Debug|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Release|.NET.ActiveCfg = Release|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Release|Any CPU.Build.0 = Release|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Debug|.NET.ActiveCfg = Debug|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Release|.NET.ActiveCfg = Release|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Release|Any CPU.Build.0 = Release|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Debug|.NET.ActiveCfg = Debug|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Release|.NET.ActiveCfg = Release|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Release|Any CPU.Build.0 = Release|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{53B04C54-63EA-45AA-BB83-8950AF3C5D68}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Debug|.NET.ActiveCfg = Debug|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Release|.NET.ActiveCfg = Release|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Release|Any CPU.Build.0 = Release|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{FD89FEBE-4914-45F3-9123-B2CB954810DD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
NAntAddinLastFileName =
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,60 @@
<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>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{53B04C54-63EA-45AA-BB83-8950AF3C5D68}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Spring</RootNamespace>
<AssemblyName>Spring.Aspects</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Common.Logging, Version=1.0.2.0, Culture=neutral, PublicKeyToken=af08829b84f0328e">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\Net\2.0\Common.Logging.dll</HintPath>
</Reference>
<Reference Include="Spring.Aop, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Aop.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Aspects\Logging\CommonLoggingAroundAdvice.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,110 @@
<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>{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Spring.Northwind</RootNamespace>
<AssemblyName>Spring.Northwind.Dao.NHibernate</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="antlr.runtime, Version=2.7.6.2, Culture=neutral, PublicKeyToken=65e474d141e25e07, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\net\2.0\antlr.runtime.dll</HintPath>
</Reference>
<Reference Include="Common.Logging, Version=1.0.2.0, Culture=neutral, PublicKeyToken=af08829b84f0328e">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Common.Logging.dll</HintPath>
</Reference>
<Reference Include="Iesi.Collections, Version=1.0.0.3, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\Iesi.Collections.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\log4net.dll</HintPath>
</Reference>
<Reference Include="NHibernate, Version=1.2.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\NHibernate.dll</HintPath>
</Reference>
<Reference Include="Spring.Core, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Core.dll</HintPath>
</Reference>
<Reference Include="Spring.Data, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Data.dll</HintPath>
</Reference>
<Reference Include="Spring.Data.NHibernate21, Version=1.1.1.20093, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Data.NHibernate21.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Dao\NHibernate\HibernateCustomerDao.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Dao\NHibernate\HibernateDao.cs" />
<Compile Include="Dao\NHibernate\HibernateOrderDao.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Dao\NHibernate\HibernateProductDao.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Mappings\Customer.hbm.xml" />
<EmbeddedResource Include="Mappings\Order.hbm.xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Spring.Northwind.Dao\Spring.Northwind.Dao.2008.csproj">
<Project>{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}</Project>
<Name>Spring.Northwind.Dao</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Mappings\OrderDetail.hbm.xml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Dao\Dao.xml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,59 @@
<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>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Spring.Northwind</RootNamespace>
<AssemblyName>Spring.Northwind.Dao</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Dao\ICustomerDao.cs" />
<Compile Include="Dao\IDao.cs" />
<Compile Include="Dao\IOrderDao.cs" />
<Compile Include="Dao\IProductDao.cs" />
<Compile Include="Dao\ISupportsDeleteDao.cs" />
<Compile Include="Dao\ISupportsSave.cs" />
<Compile Include="Domain\Customer.cs" />
<Compile Include="Domain\Order.cs" />
<Compile Include="Domain\OrderDetail.cs" />
<Compile Include="Domain\Product.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -23,6 +23,8 @@
using System;
using System.Collections;
using Common.Logging;
using Spring.Transaction.Interceptor;
using Spring.Northwind.Dao;
@@ -35,7 +37,9 @@ namespace Spring.Northwind.Service
public class FulfillmentService : IFulfillmentService
{
#region Fields
private static readonly ILog log = LogManager.GetLogger(typeof (FulfillmentService));
private IProductDao productDao;
private ICustomerDao customerDao;
@@ -86,9 +90,16 @@ namespace Spring.Northwind.Service
foreach (Order order in customer.Orders)
{
if (order.ShippedDate.HasValue)
{
log.Warn("Order with " + order.Id + " has already been shipped, skipping.");
continue;
}
//Validate Order
Validate(order);
log.Info("Order " + order.Id + " validated, proceeding with shipping..");
//Ship with external shipping service
ShippingService.ShipOrder(order);
@@ -97,7 +108,7 @@ namespace Spring.Northwind.Service
//Update shipment date
OrderDao.Update(order);
//Other operations...Decrease product quantity... etc
}

View File

@@ -0,0 +1,75 @@
<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>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{9E15876F-E9E0-43B7-9874-B54F163757D6}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Spring.Northwind</RootNamespace>
<AssemblyName>Spring.Northwind.Service</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Common.Logging, Version=1.0.2.0, Culture=neutral, PublicKeyToken=af08829b84f0328e">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\Net\2.0\Common.Logging.dll</HintPath>
</Reference>
<Reference Include="Spring.Data, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Data.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Service\FedExShippingService.cs" />
<Compile Include="Service\IFulfillmentService.cs" />
<Compile Include="Service\IShippingService.cs" />
<Compile Include="Service\FulfillmentService.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Spring.Northwind.Dao.NHibernate\Spring.Northwind.Dao.NHibernate.2008.csproj">
<Project>{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}</Project>
<Name>Spring.Northwind.Dao.NHibernate</Name>
</ProjectReference>
<ProjectReference Include="..\Spring.Northwind.Dao\Spring.Northwind.Dao.2008.csproj">
<Project>{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}</Project>
<Name>Spring.Northwind.Dao</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Service\Services.xml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,96 @@
<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>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{FD89FEBE-4914-45F3-9123-B2CB954810DD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Spring.Northwind.Web.References</RootNamespace>
<AssemblyName>Spring.Northwind.Web.References</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>.</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>.</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="antlr.runtime, Version=2.7.6.2, Culture=neutral, PublicKeyToken=65e474d141e25e07, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\antlr.runtime.dll</HintPath>
</Reference>
<Reference Include="Antlr3.Runtime, Version=3.1.0.39271, Culture=neutral, PublicKeyToken=3a9cab8f8d22bfb7, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\Antlr3.Runtime.dll</HintPath>
</Reference>
<Reference Include="Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Common.Logging.dll</HintPath>
</Reference>
<Reference Include="Common.Logging.Log4Net, Version=1.2.0.2, Culture=neutral, PublicKeyToken=af08829b84f0328e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\net\2.0\Common.Logging.Log4Net.dll</HintPath>
</Reference>
<Reference Include="Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\Iesi.Collections.dll</HintPath>
</Reference>
<Reference Include="LinFu.DynamicProxy, Version=1.0.3.14911, Culture=neutral, PublicKeyToken=62a6874124340d6e, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\LinFu.DynamicProxy.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\net\2.0\log4net.dll</HintPath>
</Reference>
<Reference Include="NHibernate, Version=2.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\NHibernate.dll</HintPath>
</Reference>
<Reference Include="NHibernate.ByteCode.LinFu, Version=2.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\NHibernate.ByteCode.LinFu.dll</HintPath>
</Reference>
<Reference Include="Spring.Core, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Core.dll</HintPath>
</Reference>
<Reference Include="Spring.Data, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Data.dll</HintPath>
</Reference>
<Reference Include="Spring.Web, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Web.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -61,6 +61,16 @@ fieldset legend {
padding: 5px;
}
.actionResultWindow
{
margin: 30px;
border: 1px solid #CCA383;
width: 90%;
background: LightGoldenrodYellow;
text-align: left;
padding: 5px;
}
#headerCell
{
background: url(../img/header-spring.png);

View File

@@ -25,6 +25,10 @@
</layout>
</appender>
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
<!-- simple appender to get results to UI -->
</appender>
<!-- Set default logging level to DEBUG -->
<root>
<level value="DEBUG" />
@@ -42,4 +46,12 @@
<logger name="NHibernate">
<level value="INFO" />
</logger>
<logger name="Spring.Transaction>">
<level value="INFO" />
<appender-ref ref="MemoryAppender" />
</logger>
<logger name="Spring.Northwind">
<level value="INFO" />
<appender-ref ref="MemoryAppender" />
</logger>
</log4net>

View File

@@ -30,8 +30,8 @@
</fieldset>
</spring:DataBindingPanel>
<div class="actionPanel">
<a href="customerlist.aspx">&laquo; Back to customer list</a> | <a href="CustomerView.aspx">
Cancel edit &raquo;</a>
<asp:LinkButton ID="customerList" runat="server" onclick="customerList_Click">&laquo; Back to customer list</asp:LinkButton> |
<asp:LinkButton ID="cancel" runat="server" onclick="cancel_Click">Cancel edit &raquo;</asp:LinkButton>
</div>
</div>
</asp:Content>

View File

@@ -58,6 +58,14 @@ public partial class CustomerEditor : Page
private void BtnSave_Click(object sender, EventArgs e)
{
customerDao.Update(CurrentCustomer);
Response.Redirect("~/CustomerView.aspx");
SetResult("ViewCustomer");
}
protected void customerList_Click(object sender, EventArgs e)
{
SetResult("CustomerList");
}
protected void cancel_Click(object sender, EventArgs e)
{
SetResult("CancelEdit");
}
}

View File

@@ -5,6 +5,14 @@
<h1>Customers in database</h1>
<p>
Below you can see all customers in the database paged to grid.
By clicking customer name you enter the details and edit information.
By clicking orders you can see all orders that customer has. Orders can
be in shipped state (they have shipped date) or they can be waiting for
shipment. You can ship orders that aren't shipped yet on the orders screen.
</p>
<br />
<asp:DataGrid id="customerList" runat="server"
AllowPaging="true"
AllowSorting="false"
@@ -17,9 +25,7 @@
<Columns>
<asp:BoundColumn HeaderText="Id" DataField="ID" />
<asp:TemplateColumn HeaderText="Name">
<ItemTemplate><a href="CustomerView.aspx?id="><%# Eval("ContactName")%></a></ItemTemplate>
</asp:TemplateColumn>
<asp:ButtonColumn HeaderText="Name" DataTextField="ContactName" CommandName="ViewCustomer" />
<asp:BoundColumn HeaderText="Company" DataField="CompanyName"/>
<asp:ButtonColumn CommandName="ViewOrders" Text="Orders" />

View File

@@ -78,7 +78,7 @@ public partial class CustomerList : Spring.Web.UI.Page
switch(e.CommandName)
{
case "ViewOrders":
case "EditCustomer":
case "ViewCustomer":
customerList.SelectedIndex = e.Item.ItemIndex;
customerEditController.EditCustomer(this.SelectedCustomer);
SetResult(e.CommandName);

View File

@@ -5,6 +5,13 @@
<h1>Orders for customer <strong><asp:Literal ID="customerName" runat="server" /></strong></h1>
<p>
On this screen you can see all orders that customer has. By clicking "Process Orders" you
can send service request to ship all unshipped orders for that customer. Behind the scenes
Spring.NET will begin service level transaction that propagates to DAO layer which then
automatically participates int the existing transaction.
</p>
<div align="center">
<asp:DataGrid ID="customerOrders" runat="server" AllowPaging="false" AllowSorting="false"
BorderColor="black" BorderWidth="1" CellPadding="3" AutoGenerateColumns="false"
@@ -19,8 +26,12 @@
</Columns>
</asp:DataGrid>
<p>
<asp:Button ID="processOrders" runat="server" Text="Process Orders"
onclick="processOrders_Click" />
</p>
<div class="actionPanel">
<a href="CustomerList.aspx">&laquo; Back to customer listing</a>
<asp:LinkButton ID="customerList" runat="server" onclick="customerList_Click">&laquo; Back to customer list</asp:LinkButton>
</div>
</div>
</asp:Content>

View File

@@ -63,4 +63,12 @@ public partial class CustomerOrders : Spring.Web.UI.Page
e.Item.DataItem = ((IList) customerOrders.DataSource)[e.Item.DataSetIndex];
}
}
protected void customerList_Click(object sender, EventArgs e)
{
SetResult("CustomerList");
}
protected void processOrders_Click(object sender, EventArgs e)
{
SetResult("ProcessOrders");
}
}

View File

@@ -25,8 +25,8 @@
</fieldset>
</spring:DataBindingPanel>
<div class="actionPanel">
<a href="customerlist.aspx">&laquo; Back to customer list</a> | <a href="CustomerEditor.aspx">
Edit Customer &raquo;</a>
<asp:LinkButton ID="customerList" runat="server" onclick="customerList_Click">&laquo; Back to customer list</asp:LinkButton> |
<asp:LinkButton ID="editCustomer" runat="server" onclick="editCustomer_Click">Edit Customer &raquo;</asp:LinkButton>
</div>
</div>
</asp:Content>

View File

@@ -58,4 +58,12 @@ public partial class CustomerView : Page
}
protected void customerList_Click(object sender, EventArgs e)
{
SetResult("CustomerList");
}
protected void editCustomer_Click(object sender, EventArgs e)
{
SetResult("EditCustomer");
}
}

View File

@@ -9,5 +9,5 @@ This sample demostrates Spring.NET NHibernate integration and concepts. All data
all transactions are automatically handled by Spring.NET.
</p>
<a href="CustomerList.aspx">Proceed to customer listing &raquo;</a>
<asp:LinkButton ID="customerList" runat="server" onclick="customerList_Click">Proceed to customer listing &raquo;</asp:LinkButton>
</asp:Content>

View File

@@ -46,4 +46,8 @@ public partial class _Default : Spring.Web.UI.Page
}
}
}
protected void customerList_Click(object sender, EventArgs e)
{
SetResult("CustomerList");
}
}

View File

@@ -0,0 +1,21 @@
<%@ Page Language="C#" MasterPageFile="~/Shared/MasterPage.master" AutoEventWireup="true"
CodeFile="FulfillmentResult.aspx.cs" Inherits="FullfillmentResult" %>
<%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<asp:Content ID="content" ContentPlaceHolderID="content" runat="server">
<h1>Order processing results</h1>
<p>
Below you can see the results from order fullfilment.
</p>
<div align="center">
<div class="actionResultWindow">
<asp:Label ID="results" runat="server" Text=""></asp:Label>
</div>
<div class="actionPanel">
<asp:LinkButton ID="customerOrders" runat="server" OnClick="customerOrders_Click">&laquo; Back to customer order list</asp:LinkButton>
</div>
</div>
</asp:Content>

View File

@@ -0,0 +1,68 @@
using System;
using System.IO;
using Common.Logging;
using log4net.Appender;
using log4net.Core;
using log4net.Layout;
using log4net.Repository;
using Spring.Northwind.Service;
using Spring.Web.UI;
using ILog=log4net.ILog;
using LogManager=log4net.LogManager;
public partial class FullfillmentResult : Page
{
private IFulfillmentService fulfillmentService;
private ICustomerEditController customerEditController;
public IFulfillmentService FulfillmentService
{
set { fulfillmentService = value; }
}
public ICustomerEditController CustomerEditController
{
set { customerEditController = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
// gather log4net output with small hack to get results...
ILoggerRepository repository = LogManager.GetRepository();
IAppender[] appenders = repository.GetAppenders();
MemoryAppender appender = null;
foreach (IAppender a in appenders)
{
if (a is MemoryAppender)
{
// we found our appender to look results from
appender = a as MemoryAppender;
break;
}
}
if (appender != null)
{
appender.Clear();
fulfillmentService.ProcessCustomer(customerEditController.CurrentCustomer.Id);
LoggingEvent[] events = appender.GetEvents();
StringWriter stringWriter = new StringWriter();
PatternLayout layout = new PatternLayout("%date{HH:mm:ss} %-5level %logger{1}: %message<br />");
foreach (LoggingEvent loggingEvent in events)
{
layout.Format(stringWriter, loggingEvent);
}
results.Text = stringWriter.ToString();
}
}
protected void customerOrders_Click(object sender, EventArgs e)
{
SetResult("Back");
}
}

View File

@@ -67,7 +67,15 @@
<add assembly="System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>
<add assembly="System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies></compilation>
<pages theme="Spring">
<controls>
<add tagPrefix="spring" namespace="Spring.Web.UI.Controls" assembly="Spring.Web"/>

View File

@@ -1,44 +1,79 @@
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<!-- Referenced by main application context configuration file -->
<!-- Referenced by main application context configuration file -->
<description>
The Northwind web layer definitions
</description>
<description>
The Northwind web layer definitions
</description>
<object name="CustomerEditController" type="NHibernateCustomerEditController" scope="session">
<constructor-arg name="sessionFactory" ref="NHibernateSessionFactory"/>
</object>
<object type="Default.aspx">
<property name="FulfillmentService" ref="FulfillmentService" />
<property name="CustomerDao" ref="CustomerDao" />
</object>
<object name="CustomerEditController" type="NHibernateCustomerEditController" scope="session">
<constructor-arg name="sessionFactory" ref="NHibernateSessionFactory"/>
</object>
<object name="CustomerEditPage" abstract="true">
<property name="CustomerEditController" ref="CustomerEditController" />
</object>
<object type="CustomerList.aspx" parent="CustomerEditPage">
<property name="CustomerDao" ref="CustomerDao" />
<property name="Results">
<dictionary>
<entry key="EditCustomer" value="redirect:CustomerEditor.aspx" />
<entry key="ViewOrders" value="redirect:CustomerOrders.aspx" />
</dictionary>
</property>
</object>
<object type="Default.aspx">
<property name="FulfillmentService" ref="FulfillmentService" />
<property name="CustomerDao" ref="CustomerDao" />
<property name="Results">
<dictionary>
<entry key="CustomerList" value="redirect:CustomerList.aspx" />
</dictionary>
</property>
</object>
<object type="CustomerEditor.aspx" parent="CustomerEditPage">
<property name="CustomerDao" ref="CustomerDao" />
</object>
<object name="CustomerEditPage" abstract="true">
<property name="CustomerEditController" ref="CustomerEditController" />
</object>
<object type="CustomerList.aspx" parent="CustomerEditPage">
<property name="CustomerDao" ref="CustomerDao" />
<property name="Results">
<dictionary>
<entry key="ViewCustomer" value="redirect:CustomerView.aspx" />
<entry key="ViewOrders" value="redirect:CustomerOrders.aspx" />
</dictionary>
</property>
</object>
<object type="CustomerEditor.aspx" parent="CustomerEditPage">
<property name="CustomerDao" ref="CustomerDao" />
<property name="Results">
<dictionary>
<entry key="CustomerList" value="redirect:CustomerList.aspx" />
<entry key="ViewCustomer" value="redirect:CustomerView.aspx" />
<entry key="CancelEdit" value="redirect:CustomerView.aspx" />
</dictionary>
</property>
</object>
<object type="CustomerView.aspx">
<property name="CustomerDao" ref="CustomerDao" />
<property name="CustomerEditController" ref="CustomerEditController" />
<property name="Results">
<dictionary>
<entry key="EditCustomer" value="redirect:CustomerEditor.aspx" />
<entry key="CustomerList" value="redirect:CustomerList.aspx" />
</dictionary>
</property>
</object>
<object type="CustomerOrders.aspx" parent="CustomerEditPage">
<property name="Results">
<dictionary>
<entry key="CustomerList" value="redirect:CustomerList.aspx" />
<entry key="ProcessOrders" value="redirect:FulfillmentResult.aspx" />
</dictionary>
</property>
</object>
<object type="FulfillmentResult.aspx">
<property name="FulfillmentService" ref="FulfillmentService" />
<property name="CustomerEditController" ref="CustomerEditController" />
<property name="Results">
<dictionary>
<entry key="Back" value="redirect:CustomerOrders.aspx" />
</dictionary>
</property>
</object>
<object type="CustomerView.aspx">
<property name="CustomerDao" ref="CustomerDao" />
<property name="CustomerEditController" ref="CustomerEditController" />
</object>
<object type="CustomerOrders.aspx" parent="CustomerEditPage" />
</objects>

View File

@@ -0,0 +1,123 @@
<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>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{2D0C5DF7-3BDB-44FB-BC1B-58E60B170BAD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Spring.Northwind</RootNamespace>
<AssemblyName>Spring.Northwind.IntegrationTests</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="antlr.runtime, Version=2.7.6.2, Culture=neutral, PublicKeyToken=65e474d141e25e07, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\Net\2.0\antlr.runtime.dll</HintPath>
</Reference>
<Reference Include="Common.Logging, Version=1.1.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\Net\2.0\Common.Logging.dll</HintPath>
</Reference>
<Reference Include="Iesi.Collections, Version=1.0.0.3, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\Iesi.Collections.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\log4net.dll</HintPath>
</Reference>
<Reference Include="NHibernate, Version=1.2.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\NHibernate21\net\2.0\NHibernate.dll</HintPath>
</Reference>
<Reference Include="nunit.framework, Version=2.2.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\lib\net\2.0\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="Spring.Core, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Core.dll</HintPath>
</Reference>
<Reference Include="Spring.Data, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Data.dll</HintPath>
</Reference>
<Reference Include="Spring.Data.NHibernate21, Version=1.1.2.20153, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Data.NHibernate21.dll</HintPath>
</Reference>
<Reference Include="Spring.Testing.NUnit, Version=1.1.2.20153, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Testing.NUnit.dll</HintPath>
</Reference>
<Reference Include="Spring.Web, Version=1.1.0.2, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\bin\net\2.0\debug\Spring.Web.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="IntegrationTests\AbstractDaoIntegrationTests.cs" />
<Compile Include="IntegrationTests\FulfillmentServiceTests.cs" />
<Compile Include="IntegrationTests\NorthwindIntegrationTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Spring.Aspects\Spring.Aspects.2008.csproj">
<Project>{53B04C54-63EA-45AA-BB83-8950AF3C5D68}</Project>
<Name>Spring.Aspects</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Spring.Northwind.Dao.NHibernate\Spring.Northwind.Dao.NHibernate.2008.csproj">
<Project>{6E4F55A0-C281-4706-A08B-BDEC2D2FBDA4}</Project>
<Name>Spring.Northwind.Dao.NHibernate</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Spring.Northwind.Dao\Spring.Northwind.Dao.2008.csproj">
<Project>{7F45EEA2-50AC-44E2-85A6-2FFB02E38C44}</Project>
<Name>Spring.Northwind.Dao</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Spring.Northwind.Service\Spring.Northwind.Service.2008.csproj">
<Project>{9E15876F-E9E0-43B7-9874-B54F163757D6}</Project>
<Name>Spring.Northwind.Service</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>rem echo "Copying .xml files for tests"
rem xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Northwind.IntegrationTests\$(ConfigurationName)\ /y /s /q</PostBuildEvent>
</PropertyGroup>
</Project>