Thoughts on Integration Architecture and Analysis.

Apologies for not being a regular blogger these days, this is my first post from Australia. I have joined new company and moved to Brisbane – a beautiful Queensland city.

This post is mainly related to the Integration competency where I am just going to share good work being done by the architect(s) to make feel better and speed up the new comer(s) in the company like myself. I have been lacking with the terms in the previous engagement(s) like Business Service, Business Events, Integration points, Product Adapters, Channel Adapters Etc…Etc… These are key components of an Integration projects and need to be well define in the analysis phase. A proper maintenance in Wiki shall be ideal for people to understand the Integration solution.

The steps which shall be followed in the Architecture/Analysis phase are:

  • Define Business Services/Business Events. For eg: If the message needs to be send from Party A to Party B to create purchase order. A Business service needs to be created like “PurchaseOrderManagement” and Business Events need to be define as CreatePurchaseOrder(), UpdatePurchaseOrder(), RetreivePurchaseOrder etc.

Creating Wiki page or register where you can add the top level “Business Services” and sub levels Business Events               (or operations) shall be ideal. Give definition to your Business services and include all the business events.

Screen for the business service register should look like below:

Screen

The name of the service register should be “PurchaseOrderManagement”. The service operations are the different              events which will act as a business service. Like CreatePurchaseorder, UpdatePurchaseOrder,                                RetreivePurchaseOrder etc.

  • Each business service should have its own page to describe and define message exchange patterns 1-way, 2-way request-response etc, Integration Points, Sequence diagram, data contract, Faults (business/system), request message schema and sample, response message schema and sample, end points etc.

The page should look like this:

Screen1

  • Integration point diagram (component diagram) and sequence diagram should be linked or added to the service operation page.
  • Integration Point Diagram: – This is a component diagram reflecting the integration points. These integration points are in the integration layer and needs to be developed in ESB (WCF/BizTalk).

Screen2

Screen3

The above diagram shows the front end caller, Integration Layer with the channel adapter and the ESB business                   service and end systems. On the same page there is a technical design section to provide the links to the business               service operations this integration point is link to.

The architecture and analysis phase are more important in the life cycle of the integration project, there are many chances that things can go wrong if proper thoughts and consideration is not taken into account, otherwise we might end up doing re-factoring or re-designing the solution.

Thanks.

Skip Create BizTalk Application using BTDF

This article is to demonstrate how to skip create BizTalk Application using BTDF. By default the btdf project will call the target “DeployAppDefinition”. This target is responsible to create BizTalk Application when it is not exists in the Admin Console, otherwise it throw an error when the application is found.

In my current project we were require to only deploy the version assemblies for the particular application without removing the BT application.

I came up with the below BTDF Project which is using the custom target to call DeployAppDefinition which checks for the existence of the application and do not remove if exists.

I need to create this variable in the property group “<SkipRemoveApp>True</ SkipRemoveApp >  “ and used it in the DeployAppDefinition target.

<!– Skip BizTalk application definition –>

<Target Name=”DeployAppDefinition” Condition=”‘$( SkipRemoveApp)’ == ‘False'”>

<Exec Command=”BTSTask.exe AddApp -ApplicationName:&quot;$(BizTalkAppName)&quot; -Description:&quot;$(ProjectName)&quot;” />

<AddAppReference ApplicationName=”$(BizTalkAppName)” AppsToReference=”@(AppsToReference)” Condition=”%(Identity) == %(Identity) and ‘@(AppsToReference)’ != ”” />

</Target>

Below is the complete btdf project. Please let me know if anyone having a different approach.

<?xml version=”1.0″ encoding=”utf-8″?>

<!–

***************************************************

**** DEPLOYMENT STEPS *****************************************************************************************************

This deployment package will only add BizTalk resources to the existing application.

***************************************************************************************************************************

–>

<Project xmlns=”http://schemas.microsoft.com/developer/msbuild/2003&#8243;

DefaultTargets=”Installer”

ToolsVersion=”4.0″

TreatAsLocalProperty=”SkipUndeploy”> <!– **** Add this so this variable is accessible on this target file ****–>

<PropertyGroup>

<Configuration Condition=”‘$(Configuration)’ == ””>Debug</Configuration>

<Platform Condition=”‘$(Platform)’ == ””>x86</Platform>

<SchemaVersion>1.0</SchemaVersion>

<ProjectName>ESB.ReferenceSystems.P</ProjectName>

<ProjectVersion Condition=”‘$(ProjectVersion)’ == ””>1.1</ProjectVersion>

<ProjectVersion Condition=”‘$(ProjectVersion)’ != ””>$(ProjectVersion)</ProjectVersion>

<IncludeSchemas>False</IncludeSchemas>

<IncludeOrchestrations>False</IncludeOrchestrations>

<IncludeTransforms>False</IncludeTransforms>

<IncludePipelines>False</IncludePipelines>

<IncludeComponents>False</IncludeComponents>

<IncludePipelineComponents>False</IncludePipelineComponents>

<IncludeCustomFunctoids>False</IncludeCustomFunctoids>

<IncludeVocabAndRules>False</IncludeVocabAndRules>

<IncludeVirtualDirectories>False</IncludeVirtualDirectories>

<IncludeMessagingBindings>False</IncludeMessagingBindings>

<IncludeDeploymentTest>False</IncludeDeploymentTest>

<Includelog4net>False</Includelog4net>

<IncludeSSO>False</IncludeSSO>

<IncludeEsbItineraries>False</IncludeEsbItineraries>

<IncludeBam>False</IncludeBam>

<IncludeInstallUtilForComponents>False</IncludeInstallUtilForComponents>

<UsingMasterBindings>True</UsingMasterBindings>

<RequireXmlPreprocessDirectives>False</RequireXmlPreprocessDirectives>

<ApplyXmlEscape>True</ApplyXmlEscape>

<IncludeSettingsSpreadsheetInMsi>True</IncludeSettingsSpreadsheetInMsi>

<SkipIISReset>True</SkipIISReset>

<SkipHostInstancesRestart>False</SkipHostInstancesRestart>

<StartApplicationOnDeploy>True</StartApplicationOnDeploy>

<EnableAllReceiveLocationsOnDeploy>False</EnableAllReceiveLocationsOnDeploy>

<StartReferencedApplicationsOnDeploy>False</StartReferencedApplicationsOnDeploy>

<UseIsolatedAppDomain>False</UseIsolatedAppDomain>

<EnableBizTalkExtendedLogging>False</EnableBizTalkExtendedLogging>

<EnableBizTalkAssemblyValidation>False</EnableBizTalkAssemblyValidation>

<EnableBizTalkCorrelationValidation>False</EnableBizTalkCorrelationValidation>

<EnableBizTalkSchemaValidation>False</EnableBizTalkSchemaValidation>

<SkipAddApp>True</SkipAddApp>

</PropertyGroup>

<PropertyGroup>

<!– Properties related to building an MSI for server deployments –>

<!– BizTalk App Version Upgrade –>

<!–   For each new product release to be deployed to your BizTalk servers: –>

<!–     1) Increment ProductVersion –>

<!–     2) Generate a new GUID and update ProductId with the new GUID –>

<!–   This allows the new MSI to automatically uninstall (not undeploy!) the old MSI and install the new one. –>

<ProductVersion Condition=”‘$(ProductVersion)’ == ””>1.0.1</ProductVersion>

<ProductVersion Condition=”‘$(ProductVersion)’ != ””>$(ProductVersion)</ProductVersion>

<ProductId Condition=”‘$(ProductId)’ == ””>A66F460E-7B65-4330-843B-477251BF3AEC</ProductId>

<ProductId Condition=”‘$(ProductId)’ != ””>$(ProductId)</ProductId>

<!– BizTalk App Version Upgrade –>

<ProductName>ESB.ReferenceSystems.P for BizTalk</ProductName>

<Manufacturer></Manufacturer>

<PackageDescription>ESB.ReferenceSystems.P</PackageDescription>

<PackageComments>ESB.ReferenceSystems.P</PackageComments>

<!– NEVER change the ProductUpgradeCode. –>

<ProductUpgradeCode>A87DEA9B-53B5-4A30-85E3-71F5C698D203</ProductUpgradeCode>

<IsInTFSBuildMode Condition=”Exists(‘$(OutDir)\$(Configuration)\ESB.ReferenceSystems.P.SubmissionProcessAPI.Schemas.dll’)”>True</IsInTFSBuildMode>

</PropertyGroup>

<!– Under TFS Team Build, set CustomizableOutDir property to true in TFS 2005/2008/2010 UpgradeTemplate. –>

<!– With a workflow build, copy the default template then modify the MSBuild task for the solution build. Set OutDir to blank and –>

<!– CommandLineArguments to String.Format(“/p:SkipInvalidConfigurations=true;TeamBuildOutDir=””{0}”” {1}”, BinariesDirectory, MSBuildArguments). –>

<PropertyGroup Condition=”‘$(Configuration)’ == ‘Debug'”>

<DeploymentFrameworkTargetsPath>$(MSBuildExtensionsPath)\DeploymentFrameworkForBizTalk\5.0\</DeploymentFrameworkTargetsPath>

<OutputPath Condition=”‘$(TeamBuildOutDir)’ == ””>bin\Debug\</OutputPath>

<OutputPath Condition=”‘$(TeamBuildOutDir)’ != ””>$(TeamBuildOutDir)</OutputPath>

<DeployPDBsToGac>false</DeployPDBsToGac>

</PropertyGroup>

<PropertyGroup Condition=”‘$(Configuration)’ == ‘Release'”>

<DeploymentFrameworkTargetsPath>$(MSBuildExtensionsPath)\DeploymentFrameworkForBizTalk\5.0\</DeploymentFrameworkTargetsPath>

<OutputPath Condition=”‘$(TeamBuildOutDir)’ == ””>bin\Release\</OutputPath>

<OutputPath Condition=”‘$(TeamBuildOutDir)’ != ””>$(TeamBuildOutDir)</OutputPath>

<DeployPDBsToGac>false</DeployPDBsToGac>

</PropertyGroup>

<PropertyGroup Condition=”‘$(Configuration)’ == ‘Server'”>

<DeploymentFrameworkTargetsPath>Framework\</DeploymentFrameworkTargetsPath>

<!– Get our PDBs into the GAC so we get file/line number information in stack traces. –>

<DeployPDBsToGac>true</DeployPDBsToGac>

</PropertyGroup>

<ItemGroup>

<PropsFromEnvSettings Include=”SsoAppUserGroup;SsoAppAdminGroup” />

</ItemGroup>

<ItemGroup>

<AdditionalFiles Include=”Deployment.config”>

<LocationPath>.</LocationPath>

</AdditionalFiles>

</ItemGroup>

<ItemGroup>

<!–<AppsToRemove Include=”ESB.ReferenceSystems.P” />–>

</ItemGroup>

<!– !!! TODO !!! –>

<Import Project=”$(DeploymentFrameworkTargetsPath)BizTalkDeploymentFramework.targets” />

<!–

The Deployment Framework automatically packages most files into the server install MSI.

However, if there are special folders that you need to include in the MSI, you can

copy them to the folder $(RedistDir) in the CustomRedist target.

To include individual files, add an ItemGroup with AdditionalFiles elements.

–>

<!–

The Targets below are to enable undeploy during the TFS build when not deployed – Bill Chesnut

–>

<!– **** PRE DEPLOYMENT SECTION ******************************************************************************************–>

<!– **********************************************************************************************************************–>

<!– **** The BTDF out of the box calls this target before it deploys the application                                  ****–>

<!– **** Set the “SkipUndeploy” to false so that we can undeploy the application before deployment                    ****–>

<!– **** Then call the Custom Deploy Target to add the undeployment step                                              ****–>

<!– **********************************************************************************************************************–>

<Target Name=”CustomDeployTarget”>

<PropertyGroup>

<SkipUndeploy>false</SkipUndeploy>

</PropertyGroup>

<CallTarget Targets=”CustomDeploy” />

</Target>

<!– **********************************************************************************************************************–>

<!– **** This target is called from CustomDeployTarget                                                                ****–>

<!– **** DeployAppDefinition is an out of the box target  which will skip the check for Add Application               ****–>

<!– **** CustomUndeployApp is the custom target created to undeploy the application                                   ****–>

<!– **** CustomDeployAssemblyTarget is the custom target to Add the BizTalk Assemblies                                ****–>

<!– **********************************************************************************************************************–>

<Target Name=”CustomDeploy” DependsOnTargets=”$(CustomDeployTargetDependsOn)” />

<PropertyGroup>

<!– CustomDeploy depends on this CustomDeployTargetDependsOn –>

<CustomDeployTargetDependsOn>

DeployAppDefinition;

CustomDeployAssemblyTarget;

</CustomDeployTargetDependsOn>

</PropertyGroup>

<!– Skip BizTalk application definition –>

<Target Name=”DeployAppDefinition” Condition=”‘$(SkipAddApp)’ == ‘False'”>

<Exec Command=”BTSTask.exe AddApp -ApplicationName:&quot;$(BizTalkAppName)&quot; -Description:&quot;$(ProjectName)&quot;” />

<AddAppReference ApplicationName=”$(BizTalkAppName)” AppsToReference=”@(AppsToReference)” Condition=”%(Identity) == %(Identity) and ‘@(AppsToReference)’ != ”” />

</Target>

<Target Name=”CustomDeployAssemblyTarget” DependsOnTargets=”$(CustomDeployAssemblyTargetDependsOn)” />

<PropertyGroup>

<!– CustomPostDeployTarget depends on this CustomPostDeployTargetDependsOn –>

<CustomDeployAssemblyTargetDependsOn>

AddBizTalkResources;

</CustomDeployAssemblyTargetDependsOn>

</PropertyGroup>

<!– **********************************************************************************************************************–>

<!– **** This target is responsible for adding all the biztalk resources into the application resources and is called ****–>

<!– **** from CustomDeployAssemblyTarget                                                                                     ****–>

<!– **********************************************************************************************************************–>

<Target Name=”AddBizTalkResources” DependsOnTargets=”$(AddBizTalkResourcesDependsOn)” />

<PropertyGroup>

<!– AddBizTalkResources depends on this AddBizTalkResourcesDependsOn –>

<AddBizTalkResourcesDependsOn>

AddBizTalkAssembliesToBizTalkResources;

</AddBizTalkResourcesDependsOn>

</PropertyGroup>

<!– **********************************************************************************************************************–>

<!– **** This target is responsible for adding the BizTalk assemblies into the application resources and is called       ****–>

<!– **** from AddBizTalkResources                                                                                     ****–>

<!– **********************************************************************************************************************–>

<Target Name=”AddBizTalkAssembliesToBizTalkResources”>

<Message Text=”In AddBizTalkAssembliesToBizTalkResources.-2″/>

<Exec

Command=”BTSTask.exe AddResource -Type:BizTalkAssembly  -Source:&quot;..\SubmissionProcessAPI.Schemas\bin\Debug\ESB.ReferenceSystems.P.SubmissionProcessAPI.Schemas.dll&quot; -ApplicationName:&quot;$(BizTalkAppName)&quot; -Overwrite -Options:GacOnAdd,GacOnImport,GacOnInstall”

Condition=”‘$(DeployBizTalkMgmtDB)’ == ‘true’ ” />

</Target>

</Project>