by community-syndication | May 4, 2011 | BizTalk Community Blogs via Syndication
Keeping up with software technology is really hard. We are living in very exciting times for the software industry as we are witnessing revolutions in areas such as cloud computing, mobility, NOSQL databases among others that are changing the way we think…(read more)
Blog Post by: gsusx
by community-syndication | May 4, 2011 | BizTalk Community Blogs via Syndication
Today I had a very weird problem. I submitted a message via a WCF webservice and had an orchestration listening on the messagebox for that particular messagetype. The orchestration does some serious data-massage and needs to store the converted message…(read more)
Blog Post by: Patrick Wellink
by community-syndication | May 4, 2011 | BizTalk Community Blogs via Syndication
Today lets take a look at what BizTalk Server dashboard provides in BizTalk 360. The picture below shows the BizTalk Dashboard of BizTalk 360:
It displays 4 key information related to BizTalk Server
- Server Properties
- Products Installed
- Host instances running
- Last 50 Windows Event Log data
1. Server Properties:
Background:
In a typical production BizTalk environment we will have more than 1 server to support high availability and scalability. Whey you experience CPU, memory or IO bottlenecks in the BizTalk server tier, you typically add more servers to the group based on the requirement. You start out with a basic scale out configuration and keep adding more servers until your requirements are met.
Note: SQL servers and Message boxes will also be scaled out in accordance with number of BizTalk servers, but its omitted for this discussion. Above (orange shade) images are taken from BizTalk scalability posters.
One of the best practices setting up the BizTalk environment is to use separate host for receiving, sending, processing and tracking messages. BizTalk host is a logical container to host the BizTalk artifacts (ports, orchestrations), once host is defined you create run time host instances (Windows NT services) in the available servers in the group. One of the other best practice is to use dedicated tracking host, which will be responsible for moving data from message box to tracking and BAM databases.
One of the challenge is to identify how the servers in the BizTalk group are utilized, whether for receive, processing, sending or tracking. In order to get this information you need to work out the relationship between BizTalk artifacts, hosts, host instances, adapters used, send handlers, receive handlers, and tracking property of the host. This is time consuming and you need a real BizTalk expert to work out this relationships.
BizTalk 360 addresses this issue seamlessly by a background algorithm that works out all these relationships and present it in a easy to understand format.
2. Products Installed
This section highlights the version of BizTalk Server and Internet Information server installed. Even though this information looks trivial, its really valuable when you are using HTTP/SOAP/WCF receive adapters to receive messages. In a multi server group with applications using one of these adapters sometime its essential to figure out which server runs IIS. If you have scaled out the environment properly, you might have dedicated only couple of server for receiving messages via IIS.
Also, its important to give attention to the icon in header, the globe symbol will only appear when IIS is installed in the server.
3. Host instances running in the server
The BizTalk server dashboard also highlights the host instances deployed on that particular server. Based on the authorization setup for the user it will also allow the users to start/stop/disable/enable host instance straight from this screen.
4. Last 50 Windows Event Log data
One of the other common scenario when supporting BizTalk production environment is users logging in to the production servers (RDP) to check event log data to diagnose errors. This posses high risk allowing support people to access the production servers frequently. BizTalk 360 addresses this issue by bringing the latest event log information direct to the BizTalk server dashboard.
Check out complete features list at biztalk360.com/tour
Nandri!
Saravana
by community-syndication | May 3, 2011 | BizTalk Community Blogs via Syndication
I just got back the finished version of the video trailer for my new cyber thriller Zero Day , which I think came out awesome! It’s not hard to imagine what a Zero Day movie trailer would look like. Let me know what you think. Zero Day Book Trailer…(read more)
Blog Post by: Mark Russinovich
by community-syndication | May 3, 2011 | BizTalk Community Blogs via Syndication
Ntrace is a great tool for logging. It has virtually no impact and is blazing fast. Finally it's been migrated to Visual studio 2010. So now I can start building my BizTalk Bestpractice toolbox with it. The author of Ntrace can probably explain best…(read more)
Blog Post by: Patrick Wellink
by community-syndication | May 3, 2011 | BizTalk Community Blogs via Syndication
Today I stumbled upon a really nice BizTalk admin tool. (thanks google reader) Have a look at it >>here<< It's a kind of Silverlight BizTalk Administration console with quite a few extra's. Really good work !…(read more)
Blog Post by: Patrick Wellink
by community-syndication | May 3, 2011 | BizTalk Community Blogs via Syndication
BizTalk 360 was announced for public technology preview yesterday, you can read more about it here http://www.biztalk360.com
Why BizTalk 360:
There is one common problem across all the BizTalk customers. i.e there is no proper support tool for BizTalk. It’s a reality people are more passionate and interested in designing, architecting and developing the software and not enough attention is given to the afterlife of that application once it reaches production. It’s very important to focus on a production application, which represents customers business and credibility. BizTalk 360 is all about managing that application that’s in production. There are some of common problems most of the BizTalk server customers face, BizTalk 360 tries to address them
Introduction:
BizTalk 360 is a web based rich internet application built using Microsoft Silverlight and WCF. Web based application means, you can centrally deploy it and no necessity to install all the BizTalk administration components on individual support persons desktop. Also, it comes with rich authorization module, which allows to give fine grained authorization to support people. No more remote desktop (RDP) access to all production servers, restrict users to only few BizTalk applications, or even provide only read-only access in the environment. The choice is yours.
Let’s see some brief introduction to some of the key modules of BizTalk 360
BizTalk Environment Dashboard:
This is the home screen of the application, as soon as you access an environment, you are presented with the environment dashboard showing various part of the system and their health status.It shows the number of applications, number of hosts, number of message boxes etc. in the environment. The green and red represents their respective health status, red is error, green is healthy. If there are any suspended instances in the environment, a red bar will appear with the count of total suspended instances and the last suspended date time.
BizTalk Application Dashboard:
BizTalk application dashboard provides a single view into a particular BizTalk applications. The artifact headings are colour coded to represent their overall health. If there are suspended instances it will be highlighted on the dashboard. Read here for more info
Diagrammatic representation of Send Port:
A picture is worth more than 1000 words, BizTalk 360 come with diagrammatic representation of send ports (only send ports for V1, road map to include other artifacts like orchestrations, receive ports etc)
Artifact Properties:
BizTalk 360 allows to view the properties of all the BizTalk artifacts like send port, receive port, receive location, map, schema, application, pipeline, etc
Governance/Auditing:
Lack of tooling around "who did what" in the system is the number one challenge. In a production application it’s vital to log this information for various reason. BizTalk 360 handles it seamlessly and provides views out of the box to see this information in your fingertips. Read here for more info
User Access Policy:
If you are running one of your "AAA" rated application on BizTalk server, you want to control the user access in a fine grained way. You don’t want one of your junior analyst supporting the application to have administrator rights on production environment. You want to control things like
- Giving only read-only access to certain people,
- Blocking certain areas of the application like, not allowing user to suspend/terminate instances,
- Restricting users to only few BizTalk applications etc.
- Restricting users from starting/stopping application artifacts like (send port, receive location, orchestration) and host instances etc.
BizTalk 360 takes care of all these requirements seamlessly with a full admin panel to control it, and also audit it. Read here for more info
Topology:
BizTalk server is targeted for enterprise customers, so a typical BizTalk environment will have at least 4 servers (2 BizTalk, 2 SQL) in most of the cases to support high availability. It’s vital to know your topology any time without digging through out of sync Visio documents. BizTalk 360 provides a graphical view of your topology dynamically generated from your environment. Read here for more info
Advanced Event Viewer:
One of the other problem application support people face maintaining BizTalk production environment is probing through various event logs across multiple servers in the group to diagnose problems. This is both time consuming and also a security risk allowing support people to have full access to the servers. BizTalk 360 tackles this issue by providing a centralized event viewer functionality. It understand the topology of the environment, pulls all the event log information and presents it in a central place. The query builder is powerful as shown in the above picture. Read here for more info
Business Activity Monitoring portal:
BizTalk 360 also comes with a simple BAM portal, which allows users to get to BAM data from a single UI. Users can search for activities, see permission and activities time window. BizTalk 360 utilizes the security mechanism provided by BizTalk BAM infrastructure, hence this will nicely complement your existing BAM investment.
Host Container View:
BizTalk host is a logical container for various BizTalk artifacts. When it comes to scalability, administrator normally create multiple host and host instances and deploy them in various BizTalk servers. BizTalk 360 provides a Host Dashboard, which allow users to see what’s running inside the host (host instance) at any point in time. From the above picture you can see it list the orchestrations, send port and receive ports that run inside a particular host. Read here for more info
BizTalk Server Characteristics:
In a typical production BizTalk environment you’ll have 2 or more servers performing various activities like sending, receive, processing and tracking based on your requirements. BizTalk 360’s BizTalk Server dashboard provides the characteristics of that server and it clearly shows "how the server is been utilized". Apart from this the server dash board shows various other things like host instances running in the server, event viewer data, whether its web server etc. Read here for more info
This blog post is just an intro to BizTalk 260, please check the feature tour section for further information. You can also download and give it a shot.
Nandri!
Saravana
by community-syndication | May 3, 2011 | BizTalk Community Blogs via Syndication
In essence it says that we are looking for new recruits in the Microsoft (Integration) area. Great opportunities for the right person.
Also see http://www.zystems.se/
Blog Post by: Johan Hedberg
by community-syndication | May 2, 2011 | BizTalk Community Blogs via Syndication
From time to time I get questions about mapping puzzles, and I love it! Send me more of those! (I realize might regret that statement later). This time the puzzle was how best to do a conditional cumulative sum, or keyed conditional sum, also possibly known as grouped conditional sum.
The scenario is this (I’ve removed some namespaces etc for readability):
<io_statsbidrag_ersattning>
<rows>
<row>
<Statsbidrag_Statsbidragkod>1</Statsbidrag_Statsbidragkod>
<Statsbidrag_Ersattningkod>1</Statsbidrag_Ersattningkod>
<Statsbidrag_Ersnivakod>1</Statsbidrag_Ersnivakod>
<Statsbidrag_Amsutblopnr>1113</Statsbidrag_Amsutblopnr>
<Statsbidrag_Ersattningsdgr>41856.50</Statsbidrag_Ersattningsdgr>
<Statsbidrag_Belopp>25288084</Statsbidrag_Belopp>
<Statsbidrag_Skatt>6690289</Statsbidrag_Skatt>
</row>
<row>
<Statsbidrag_Statsbidragkod>1</Statsbidrag_Statsbidragkod>
<Statsbidrag_Ersattningkod>1</Statsbidrag_Ersattningkod>
<Statsbidrag_Ersnivakod>1</Statsbidrag_Ersnivakod>
<Statsbidrag_Amsutblopnr>1113</Statsbidrag_Amsutblopnr>
<Statsbidrag_Ersattningsdgr>41856.50</Statsbidrag_Ersattningsdgr>
<Statsbidrag_Belopp>29627</Statsbidrag_Belopp>
<Statsbidrag_Skatt>6690289</Statsbidrag_Skatt>
</row>
<row>
<Statsbidrag_Statsbidragkod>1</Statsbidrag_Statsbidragkod>
<Statsbidrag_Ersattningkod>1</Statsbidrag_Ersattningkod>
<Statsbidrag_Ersnivakod>2</Statsbidrag_Ersnivakod>
<Statsbidrag_Amsutblopnr>1113</Statsbidrag_Amsutblopnr>
<Statsbidrag_Ersattningsdgr>41856.50</Statsbidrag_Ersattningsdgr>
<Statsbidrag_Belopp>234348</Statsbidrag_Belopp>
<Statsbidrag_Skatt>6690289</Statsbidrag_Skatt>
</row>
</rows>
</io_statsbidrag_ersattning>
How do you best produce a map that as step one summarize all Statsbidrag_Belopp for each variation of Statsbidrag_Ersattningskod, and returns this (let’s call this scenario 1):
<io_statsbidrag_ersattning>
<rows>
<row>
<Statsbidrag_Ersattningkod>1</Statsbidrag_Ersattningkod>
<Statsbidrag_Belopp>25552059</Statsbidrag_Belopp>
</row>
</rows>
</io_statsbidrag_ersattning>
and as step two, summarize all Statsbidrag_belopp for each combination of Statsbidrag_Ersattningskod and Statsbidrag_Ersnivakod, and return this (let’s call this scenario 2):
<io_statsbidrag_ersattning>
<rows>
<row>
<Statsbidrag_Ersattningkod>1</Statsbidrag_Ersattningkod>
<Statsbidrag_Ersnivakod>1</Statsbidrag_Ersnivakod>
<Statsbidrag_Belopp>25317711</Statsbidrag_Belopp>
</row>
<row>
<Statsbidrag_Ersattningkod>1</Statsbidrag_Ersattningkod>
<Statsbidrag_Ersnivakod>2</Statsbidrag_Ersnivakod>
<Statsbidrag_Belopp>234348</Statsbidrag_Belopp>
</row>
</rows>
</io_statsbidrag_ersattning>
You might start thinking custom xslt and xsl:sort or xsl:keys or muenchian methods and things like that. That’s one way to do it. I actually prefer using the mapper for most maps until performance forces me to go another way.
My solution for scenario 1:
My Solution for scenario 2:
I am not presenting a complete solution for scenario 1, since it’s really just a subset of the functionality required for scenario 2, but it’s all available in the code attached to this post.
The magic of the scenario 2 solution happens in the three scripting functoids. The first one, connected to the destination root node contains the following snippet (again namespace deprived for readability):
List<string> keyList= new List<string>();
void initglobals() {}
It’s simply responsible for making sure that the variable keyList is set up. The empty method that return void ensures that I can connect this to an output node to make sure it triggers, yet it will produce no output.
The next functoid then makes use of that list, and adds all unique keys to it (which is unique combinations of the two keys separated by a secure character, in this case a colon):
public string AddKey(string key)
{
if (keyList.Contains(key))
return string.Empty;
keyList.Add(key);
return key;
}
The Not Equals functoid then makes sure that we will only see output when a new unique combination is found, by checking to make sure that the string outputted from the scripting functoids <> and empty string.
The third functoid then is responsible for doing the summation (I’ve inserted a linebreak and some spaces in the xpath statement for readability, so don’t just copy paste this):
<xsl:template name="OutputSum">
<xsl:param name="param1" />
<xsl:param name="param2" />
<xsl:element name="Statsbidrag_Belopp">
<xsl:value-of select="sum(//row[Statsbidrag_Ersattningkod=$param1
and Statsbidrag_Ersnivakod=$param2]/Statsbidrag_Belopp)" />
</xsl:element>
</xsl:template>
This simple xslt call template takes the two key values in, and does a summation of all rows that has these key values set to these specific values.
Now someone might object and say that this would mean an unnecessary amount of summation gets done. But that’s actually not the case, the mapper is clever enough to only do this under the condition of the Not Equals functoid returning true, as the following xslt snippet shows (this is just a portion of the xslt generated):
<xsl:variable name="var:v3" select="userCSharp:LogicalNe(string($var:v2) , "")" />
<xsl:if test="$var:v3">
<row>
...
<xsl:call-template name="OutputSum">
<xsl:with-param name="param1" select="string(Statsbidrag_Ersattningkod/text())" />
<xsl:with-param name="param2" select="string(Statsbidrag_Ersnivakod/text())" />
</xsl:call-template>
</row>
</xsl:if>’
So a short summation (pun intended) of the work involved:
- Create a global variable, a list to hold keys
- Add to that list once you discover a new key
- Add logic to that discovery to only output your destination node when you hit a new key
- Implement a xslt call template and use xpath to sum based on your keys
If you want to further review this sample solution the code is attached.
Blog Post by: Johan Hedberg
by community-syndication | May 2, 2011 | BizTalk Community Blogs via Syndication
As I mentioned in previous posts , during the development of the SO-Aware Test Workbench we literally obsessed about making performance testing as simple as it gets. One of the aspects that make performance testing so simple with the SO-Aware Test Workbench…(read more)
Blog Post by: gsusx