Brian Loesgen's Blog

BizTalk, Enterprise Service Bus (ESB), SOA, Oslo, San Diego .NET User Group, San Diego Software Industry Council Web Services... and stuff!

  Home  |   Contact  |   Syndication    |   Login
  93 Posts | 0 Stories | 48 Comments | 84 Trackbacks

News

Tag Cloud


Archives

Post Categories

Image Galleries

My Blog Friends

Wednesday, May 07, 2008 #

Last year I went to Jordan to work with Microsoft on an ESB proof-of-concept for the Jordanian government. The press release below explains how it ended :)

I am really excited about this project. We have a stellar team forming around this project, and some very cool work ahead. .

 

Keep scrolling down, there are some good photos further down!

 

 

Here's a picture from the contract signing:

Here's a picture of Bill Gates and His Excellency the minister at the official contract signing kicking off this project (which happened at an e-government symposium in the UAE in January).

ESP2

 

Here's our official press release:

 

clip_image001

NEUDESIC TO ASSIST IN MICROSOFT ESB IMPLEMENTATION FOR JORDANIAN GOVERNMENT

Enterprise Service Bus To Strengthen Jordanian Government’s e-Government Offerings

IRVINE, CALIF. – APRIL 25, 2008 – Neudesic, a leading Microsoft National Systems Integrator and Gold Certified Partner, recently ranked # 197 on the Inc. 500 List, has announced that it has been selected by Microsoft to assist with the implementation of an Enterprise Service Bus (ESB) for the Jordanian government.

“Microsoft’s selection of Neudesic for this strategically important project is a further testament of Neudesic’s leadership role in the services-oriented architecture and enterprise service bus space,” said Neudesic’s VP of Technology Tim Marshall.

The project will include the design, implementation and rollout of an ESB that will be used across all government ministries, and with external trading partners and agencies, to further extend, automate and streamline the range of government services that are available as e-government offerings to citizens and partners.

“We are looking forward to working with Microsoft and the Jordanian government to rollout an ESB that will serve as foundational infrastructure and meet their e-government communications needs for years to come,” said Brian Loesgen, Neudesic’s BizTalk architect for the project.  “The government has recognized that a contemporary services-oriented infrastructure would provide them with the most agile and flexible messaging and integration platform, and that the Microsoft technology stack was perfectly suited to their needs.”

Jordan has historically been at the vanguard of e-government services, offering efficient processes with completion time unheard of in many countries, such as passport issuance within 2 days and drivers’ licenses in 2 hours.  Their adoption of ESB messaging will strengthen this position.

“We look forward to working with Neudesic on this project.  With their proven track record of success and depth of experience with these technologies, they will ensure that the results of this project will meet, or exceed, the government’s expectations,” said Khaled Chebat, Microsoft’s Services Lead for the Eastern Mediterranean.

 

And lastly...

I work hard, and I play hard. I'm not the sort to sit in a hotel room wishing everything was just like at home. The Jordanian people are super-friendly, generous and hospitable (well, except for when they get behind a steering wheel :)). I had lots of fun last year exploring the country, and I have more great adventures planned.

Here's a photo of me from a couple of weeks ago, at about 25 meters depth in the Red Sea, in front of the Cedar Pride wreck in Aqaba Jordan. It was deliberately sunk approx 25 years ago, and was far more interesting than other wrecks I've done. I took a bus down (about 4 hours) from Amman, spent the weekend in Aqaba, then took a taxi back following the Dead Sea route. I wanted to go that route primarily because the desert route would have been a steep altitude gain right at the start, not a good idea after a morning of diving, and as an added bonus, got the spectacular Dead Sea coast.

Much better way to spend my off-hours than hanging around the hotel watching CNN!

Brian in front of wreck

Technorati Tags: ,,,

Saturday, May 03, 2008 #

I'll be doing a webcast next Friday on Microsoft's ESB Guidance. It will be recorded if you can't make it live. This will be the first in a series, but I am not going to commit to future dates yet as I have a ton of things going on and am looking at 80%+ travel for an extended period of time. I will however be doing more webcasts. Future topics will be more advanced, include themes such as a deeper drilldown into SOA governance, extending the ESB Guidance, etc.

 

Details for this first webcast are:

 

Title

Introduction to Microsoft’s ESB Guidance

Description

The Microsoft ESB Guidance uses Microsoft BizTalk Server 2006 R2 to support a loosely-coupled messaging architecture, and extends the functionality of BizTalk Server to provide a range of new capabilities focused on building robust, connected, service-oriented applications that incorporate itinerary-based service invocation for lightweight service composition, dynamic resolution of endpoints and maps, Web service and WS-* integration, fault management and reporting, and integration with third-party SOA governance solutions.

This webcast will be an introduction to Microsoft’s ESB Guidance. The goal of this session is to explore the architecture of Microsoft’s ESB Guidance 1.0, and explain how it can be applied to create ESB-based business solutions. We will examine the core components of the ESB Guidance, as well as the built-in extensibility points.

Agenda

· Business drivers behind an ESB (Why do I care? Why do I want to do this?)

· Architectural overview (What’s in the box? How does it work?)

· Demos

Meeting Details

Friday May 9, 2008, 1:00-2:15pm Pacific GMT -8 (75 minutes)

Call for audio: 866-500-6738 or +1-203-480-8000, passcode: 221223#

Live Meeting: https://www.livemeeting.com/cc/microsoft/join?id=BTSBAG&role=attend&pw=35DKTQ

 

Technorati Tags: ,,,

Friday, May 02, 2008 #

I'm late blogging about this (and others!) as I've been traveling (more on what I've been doing in a future post). Earlier this week, Neuron-ESB 2.0 shipped.

Neuron-ESB 2.0 is the culmination of a lot of hard work by a lot of smart people. It is an ESB product that is built from the ground up on WCF. The fact that this exists at all is a true testament to the brain trust at Neudesic, and shows just how deeply SOA/ESB thinking runs throughout the entire company. It's an honor and a pleasure to work alongside these folks.

 

Best place to go if you want more information is http://NeuronEsb.com. My colleague David Pallman ("father" of Neuron-ESB, ex-Indigo team member, author, and my co-author on a future ESB book), posted a great architectural overview. He's also did another blog post that talks about the management experience. This is likely the first two posts of many (now that he has a little time to breath :).

 

To ward off the inevitable question about "does this replace BizTalk?", the answer is "no, not at all, in fact they work really well together". I intend to elaborate on this point in a future post as I keep encountering (understandable) confusion on this question.

 

So, David, Marty, Curt, Brandon and everyone else that has been involved throughout Neuron-ESB's development cycle: congratulations on a job well done!

 

Technorati Tags: ,,,

 

---------------------------------------------------------------------------------

 

 

NEUDESIC RELEASES NEURON-ESB 2.0

New version of Enterprise Service Bus software extends the Microsoft .NET Platform

IRVINE, CALIF. – April 29, 2008 - Neudesic, a leading provider of business solutions that leverage the capabilities of the Microsoft product line, announced today the release of version 2.0 of Neuron-ESB. Neuron-ESB is an Enterprise Service Bus that extends the Microsoft Platform by providing real-time messaging, integration and web service management. Neuron-ESB accelerates SOA adoption by helping companies successfully implement real-time integration across their enterprise, allowing timely response to changing events within their business.

Neuron-ESB is built on the Microsoft Windows Communication Framework (WCF) technology to provide real-time reliable messaging options for companies adopting SOA. Neuron-ESB manages all communication over the bus by sending messages over “Topics” using a publish-subscribe pattern and supports federated, geographic deployments. Neuron-ESB helps companies administer and automate complex tasks and is proven to significantly reduce the infrastructure, development, training and long term support costs for businesses developing SOA solutions.

“Neuron-ESB provides the messaging backbone for all of our critical applications,” said Jeffrey Sullivan, Chief Information Officer of ThinkCash. “Neuron-ESB allowed us to leverage our developers much more effectively while providing us the ability to go to market quickly with new solutions. We were able to shift our service development from the architect role to the more ubiquitous developer role while, decreasing our deployment time of new services by 50%. We started with just 1 developer who received 4 days of Neuron-ESB training. Within 6 months and no additional training, we had a 15X increase in the number of our internal developers who were able to use Neuron-ESB.”

Neuron-ESB 2.0 delivers a unique set of capabilities that extend and combine key strategic Microsoft technologies such as Microsoft BizTalk Server 2006 R2 & RFID, Microsoft Office SharePoint Server 3.0, Microsoft SQL Server, Microsoft Dynamics, Microsoft Office, .NET 3.0/3.5, Windows Communication Foundation (WCF), Windows Workflow Foundation (WF), WCF Line of Business Adapters and MSMQ. The synergy between Neuron-ESB and these products empower companies to develop more robust and business-aware applications with far less effort and complexity.

“Neuron-ESB 2.0 represents a significant evolution for the Microsoft Platform while addressing the Enterprise Service Bus needs of every customer running Microsoft Windows.  Our technology allows businesses to effectively leverage their Microsoft investments to deliver real-time solutions,” stated Marty Wasznicky, Vice President of Product Development. “Our product provides a new level of flexibility and ease of use that will help companies increase their productivity while reducing their development and operational costs. Moreover we’ve formed a strategic partnership with SOA Software and achieved certification as a Governed Service Platform through the Open Governance Initiative. Our customers can be confident that Neuron-ESB will enhance the fidelity of their Governance initiatives.”

“The Open Governance Initiative is rapidly gaining momentum amongst platform vendors, Governance solution providers, and end-user customers,” said Frank Martinez, Executive Vice President of SOA Software.  “The addition of Neuron-ESB, as a Microsoft .NET and WCF based ESB to the list of Governed Service Platforms highlights the importance of this certification for platform vendors.”


Thursday, April 24, 2008 #

By now many of you will have heard the announcement for BizTalk Server 2006 R3. You can read about it on Steve Martin's blog.

 

In addition to being a "synching" release that enables compatibility with SQL 2008 and VS.NET 2008, the high points (from the post) are:

  • New web service registry capabilities with support for UDDI (Universal Description Discovery and Integration) version 3.0
  • Enhanced service enablement of applications (through new and enhanced adapters for LOB applications, databases, and legacy/host systems)
  • Enhanced service enablement of “edge” devices through BizTalk RFID Mobile
  • Enhanced interoperability and connectivity support for B2B protocols (like SWIFT, EDI, etc)
  • SOA patterns and best practices guidance to assist our customer’s implementations

I think the most interesting part is the UDDI bit. This marks a migration of UDDI from the base OS (in Win2K3) into BizTalk Server. When I first saw that, I was surprised, but, thinking about it, it really makes a lot of sense. The migration of registry functionality is actually a steeping stone step, moving us closer to what Oslo will bring, where the process server is tightly tied to the registry (now) or repository (later, in Oslo).

 

This is also great news and a really good move for current BizTalk devs, as hopefully it will help move registry access more into the mainstream. And once you drink the registry koolaid, you're well on your way to ESB nirvana :)

 

Technorati Tags: ,,,,

Tuesday, April 15, 2008 #

We've just been told we are allowed to say where we are, so, as my colleague Sam Gentile has done,  I will :)

 

I'm at the MVP Summit in Redmond, sitting in an Oslo software design review (I first blogged about Oslo here),  surrounded by a bunch of really smart people.

 

We've been told we're allowed to say that we're excited, so..... I am excited by what I see. BizTalkers, it turns out we've been going down the right path for years.

 

Technorati Tags: ,,

Saturday, April 05, 2008 #

Microsoft has just released a new version(1.1) of the BizTalk Best Practices Analyzer (BPA). For those of you not familiar with it, it's an awesome tool that looks at your infrastructure, compares it to rules gathered from a variety of experts, and issues a report with recommendations. It does not actually change anything, it just scans the environment and spots opportunities for improvement, provides an explanation and a link to further documentation for anything it reports on. To give you an idea of scope-of-change, version 1.0 had 77 rules, version 1.1 has 220. This is an EXTREMELY important tool. BizTalk solutions typically span a wide swath of the Microsoft technology stack, and mis-configurations outside of BizTalk (eg: IIS, file system, database, etc) can have a big impact on the performance of a BizTalk solution. The BPA looks across the stack, and identifies potential problem areas.

Download it here:

http://www.microsoft.com/downloads/details.aspx?FamilyId=DDA047E3-408E-48BA-83F9-F397226CD6D4&displaylang=en

 

Along the same lines, I blogged recently about the new BizTalk operations guide which is an invaluable reference source. If you have not looked at it yet, you should do so, it's well worth your time. See that post here: http://geekswithblogs.net/bloesgen/archive/2008/02/21/119857.aspx.

 

The following are some screen shots from the Best Practices Analyzer at work:

 

Doing a scan:

 

image

 

List report:

image

Drilling into an issue and asking for an explanation (this is in one of my VMs, no cause for alarm :)):

image

 


Monday, March 10, 2008 #

Some quick notes:

 

  • Tomorrow (Mar 11 2008) my friend and all-round rock star Michele Leroux-Bustamante will be speaking at the Connected Systems SIG of the San Diego .NET User Group. We will meet at the Microsoft La Jolla office, 6:00 for pizza and networking, 6:30 for the meeting.
  • Wednesday Chris Romp and I take our critically-acclaimed (we're critical, and we acclaim it :)) BizTalk Development Best Practices show to the Orange County Connected Systems User Group meeting (Microsoft Technology Center, 3 Park Plaza, Suite 1600, Irvine). I've done a bazillion presentations (and perhaps even more!) during the course of my career, and this is perhaps one of the most fun to deliver. It always turns into a highly-interactive event, and everyone, including us, learns something. RSVP to mikev@mvasoftware.com. Pizza and networking at 6:30, meeting starts at 7:00.
  • I will be presenting at TechEd again this year, this time a Technical Drilldown into Microsoft's ESB Guidance, in the SOA and Business Process track. I'm really looking forward to it, TechEd is always such a great event.
  • Lastly, I am honored to be participating on a curriculum advisory board for California State University, for a new SOA program they are developing. This is going to be fun I think, and it's great to be able to help shape a far-reaching course like this. I did a similar thing for University of California San Diego a couple of years ago. If anyone has any thoughts on this, please drop me a note.

Monday, March 03, 2008 #

There was a message at the Codeplex site from someone having issues doing a simple "receive file from folder, do dynamic endpoint resolution and deliver message". I threw together a little sample showing how this works, and blogged about it in case others need this too.

The moving parts involved are:

  • receive location using the ItineraryReceivePassthrough pipeline
  • dynamic send port using the ItinerarySendPassthrough pipeline

How it works:

  • the message is received
  • the ESB Dispatcher Disassembler calls the Resolver specified in the Endpoint (in this sample, the business rules engine, see below)
  • the Resolver invokes the rules policy
  • the AdapterProvider framework sets appropriate outbound adapter information
  • the message hits the MessageBox
  • a send port subscribes to all messages from that specific receive location
  • the message is delivered

 

The receive configuration looks like this:

image

(full endpoint value is "BRE:\\policy=Microsoft.Practices.ESB.Test;version=;useMsg=;MessageExchangePattern=;")

Next, using the BizTalk Admin tool, right-click your test application and add a reference to the Microsoft.Practices.ESB BizTalk application. That way you'll be able to access the resources it contains, including the pipelines. We will need this for the next step.

The send side looks like this (note that there are no values set in the per-instance properties):

image

Then, of course, we need a filter condition to link them together:

image

The ultra-complex rules policy :) looks like this:

image

 

Technorati Tags: ,,

Thursday, February 21, 2008 #

I've just spent some quality time going through the just-released BizTalk Operations Guide.

I can't stress enough how significant this document is. It brings together a ton of information on the planning and operations of a healthy BizTalk environment. It provides a bunch of easy to follow checklists.

I believe that everyone involved in development or management of BizTalk solutions should read this document. In fact, you should probably read it several times a year, and refer to it regularly.

HIGHLY RECOMMENDE READING!

Really nice work from Microsoft, and congratulations to everyone involved in producing such a high-quality and practical document.  From the doc....

 

What's in It?

Guidance based on real-world experience. The idea for the guide originated with Microsoft field representatives, partner organizations, and customers who plan, deploy, and maintain BizTalk Server installations. This group of IT professionals has accumulated extensive hands-on experience with a diverse range of BizTalk solutions. As they gained experience they created checklists, best practices, and presentations to guide future BizTalk Server operations. We collected and organized this information to create the guide.

Key portions of this guide are new; however, a considerable portion consists of documentation taken from BizTalk Server 2006 R2 Help, white papers, Knowledge Base articles, and other sources. It has been carefully reviewed and vetted by experts from the community of BizTalk Server IT professionals and members of the product development team, whom we gratefully acknowledge at the end of this topic. We believe that the information presented here will help BizTalk Server users solve, and above all, avoid many of the common problems that can occur while deploying and maintaining a BizTalk Server installation.

The BizTalk Server Operations guide is now available for download in DOCX, CHM, and PDF file formats at the following locations:

http://download.microsoft.com/download/a/a/d/aad035e6-e03b-4bea-ad9a-fa1ff8d10ca0/BTS06R2_OpReadiness.docx
http://download.microsoft.com/download/a/a/d/aad035e6-e03b-4bea-ad9a-fa1ff8d10ca0/BTS06R2_OpReadiness.exe
http://download.microsoft.com/download/a/a/d/aad035e6-e03b-4bea-ad9a-fa1ff8d10ca0/BTS06R2_OpReadiness.pdf


Tuesday, February 12, 2008 #

There are a few things coming up over the next couple of weeks in San Diego that may be of interest:

 

  • Tonight, Feb 12, I will be doing a presentation on Microsoft's ESB Guidance at the San Diego .NET User Group meeting of the Connected Systems SIG. We will meet at the Microsoft office in La Jolla, 6:00 for pizza, meeting starts at 6:30. I'll probably go for a couple of hours, more if you want, because that's what a SIG is all about!
  • Tuesday, February 26, Mickey Williams (MVP, author, Neudesic Technical Director) will be doing a session on .NET 3.0 language extensions at the main meeting of the San Diego .NET User Group. Meeting will be at the Scripps Ranch library, 6:00 for pizza, meeting starts at 6:30.
  • Wednesday, February 27, Jason Noble (Neudesic Portal and Collaboration Practice Manager) will be participating in a panel on mashups ("Mashups are in your future!") for the SOA group I run for the San Diego Software Industry Council. Meeting will be at Websense in Sorrento Valley, 5:30 for snacks/networking, meeting starts at 6:00

 

Some cool stuff in there folks, hope you can make it!

 

Technorati Tags: ,,

Monday, February 11, 2008 #

This post is a distinct departure from my usual BizTalk/ESB/SOA/etc-type posts . This gets into another area I'm pretty passionate about: media, e-home, and being wired.

I had a conversation with a fellow geek frequent traveler recently, and was surprised to find out that not everybody was doing things to the extreme I was, so that inspired me to do a follow up post to my Media Center post (recap: while Vista was in beta I decided to charge out and build, from CPU up, a home Media Center PC). I’m doing some cool stuff that makes traveling more tolerable, and makes being away from home, well, a little less like being away from home. I'm hoping that this post helps some of my fellow travelers realize the same benefits.

It’s been just over a year now since I assembled by Vista Media Center PC. Much has changed. Over Christmas, I thoroughly geeked out. I:

  • Bought a Linksys 802.11n gaming router (optimized for low lag, when a 12 year-old is coming at you with a rocket launcher, milliseconds matter!). It's probably the same as their normal router, but, that sci-fi silk screen (which bumps up the cost $50) sure makes it feel faster. It's optimized for low lag, which I  guess means their non-gamer routers are optimized for maximum lag???
  • Added a couple of gig of RAM to the Media Center PC in my stereo cabinet, bumped up storage to about a terabyte too
  • Added a 4 gig USB internal Ready-Boost USD flash drive to the Media Center PC in my stereo cabinet. This is a 4 gig USB flash drive that plugs directly into a USB head connector on the motherboard, Very cool.
  • Replaced my kitchen PC with a dual-core 64-bit machine (‘cause when we look up recipes, it has to be fast). Had someone told me just 5 years ago I’d have that in my kitchen, I’d have thought them insane
  • Got a wireless adapter for the Xbox 360 in my bedroom (it's my fail-over Xbox, I'm all about high availability!) and now I can stream recorded TV to my bedroom TV (the nightly news is always there when I'm ready to be lulled to sleep, no matter what time). That's normal behavior, right? Surely everyone streams media to their bedroom Xbox?
  • Overall, I retired 3 computers. Nice! The power savings should cover a massive fraction of what I've spent on this effort overall.

Then I got to work on some of the software aspects. I found Webguide, a seemingly dead-end freeware product (Microsoft hired the author), that lets me remotely “reach in” to my Media Center. This is cool, I could, from anywhere on the planet, reach in and retrieve media like the Colbert Report from last night, or the local San Diego news. Cool! In addition, I can check out the TV guide and schedule recordings. Nice.

Here's what it looks like in a browser from a remote location (note: the whole family uses this, these are not *my* shows!):

image

Then, there's a really cool Vista gadget too that gives me, from anywhere in the world, a synopsis of recent activity on my desktop:

 

image

Problem though… I have a cable modem and dynamic IP, how will I “call home” when my IP changes? As an architect, I immediately started mapping this out in my head, a Windows service registering the current IP with a store in the cloud (maybe even using the super cool labs.biztalk.net relay service to broadcast a new IP to myself), but then… I thought… let’s look around before firing up Visual Studio, SOMEBODY has done this. I came across DynDNS.org that provides a free (for individuals, with some limitations that entice you to upgrade to “non-free”) service that allows you to point at http://thisIsMyName.dyndns.org, which if, you have it configured properly, will resolve to whatever was last reported as being your IP address. How does their registry get updated? That the really cool part. When my router’s not busy blowing up over-testosterone teenagers, it communicates with them and tells them what my current IP is. Very sweet. This is as good as I would have gotten had I written it myself.

But wait, there’s more…. I have a 3rd gen iPod Nano (the “a little video for everyone”). Wouldn’t it be cool if I could somehow convert the video and be able to watch it on my Nano, say, oh, on a plane? Well dear readers, this was NOT as easy as you would expect. I tried several options, and eventually came across Any Video Converter which could put that Colbert Report or Daily Show on my Nano. Sweet!

image

 

That would look something like this:

image

 

Another cool thing, I found this add-on call LifeExtender. You feed it some rules, and it will go through your media files and strip out commercials. The goodness here is that the file size drops a lot, making it faster to move across the Internet, as well as faster to transcode. I was somewhat apprehensive about having this thing modifying my recorded media, but so far, my experiences have been good. You can schedule it too, so it'll wake up at pre-determined time and scan for and process any new media files that meet your rules.

So, to recap, our flow so far is:

  • show was recorded at my home
  • I reach across he Internet from Jordan or anywhere else in the world and grab the show
  • I go through a conversion process  (or watch it on my notebook)
  • I add the show to iTunes
  • the show gets to onto my Nano when I sync, and I can watch it  (possibly, while flying home!)

The system's not perfect. I drag a 1+ gig (depending on time and recording quality) thing to me and convert it to a 100 meg thing, that makes no sense to me. The folks over at Any Video Converter tell me that command line invocation is coming in a future version, I should then in theory be able to have a service running that converts it at home, so that I only drag the 100 meg things around he world.

 

Once I can do that, I'll be happy and stop with this stuff. At least for a while. Probably a short while..... Who am I kidding? I'd find other geeky challenge to keep me busy!

 

Punchline in all this is... I really don't watch much TV. I do however like a challenge, and... that's what this has been, a fun engineering challenge.

 


Wednesday, February 06, 2008 #

It seems I'm the only one that hasn't blogged about this yet, so rather than be left out, I though I'd fix that.

 

Tomorrow night (Feb 7 2008), Microsoft SoCal Technology Specialist  Chris Romp and I will be doing our well-received and now-finely-honed presentation on BizTalk development best practices at the Los Angeles Connected Systems user group. Chris and I have a lot fun doing this one, it's always a lively and interactive presentation, and everybody (sometimes including us), learns something new. So if you're in the L.A. area, please do swing by.

 

Learning how to improve your BizTalk development experience while increasing the quality of your solutions... wow! That will certainly offset any L.A. traffic concerns. Did I mention the free pizza?  Now are you coming? :)

 

Hope to see you there, be sure to register, this will be a good one!


Friday, February 01, 2008 #

For the past year or so I have had the pleasure and honor of working with Thomas Erl on a couple of forthcoming SOA/ESB books (I'll post more details when we get closer -- soon I hope!), that are part of his Prentice Hall Service-Oriented Computing series of books.

Another one of the books in the series that he's currently working on is SOA Design Patterns (to be release in May 2008). I've already contributed a bit, and am working on further contributions. You can help too! There is a public review in progress right now through the end of the Feb, your comments are welcome.

If you're an architect or patterns type (regardless of your technology preferences) check out http://www.soapatterns.org. We want as much community input as possible from you guys and gals in the trenches that are eating/sleeping/breathing SOA so that this becomes the definitive work on SOA Design Patterns.

 


Monday, January 28, 2008 #

Consultants (like me) tend to exist in very different worlds than enterprise architects and developers. We get exposure across a broad range of companies, flitting from site to site, solving problems, spewing wisdom, and moving on. That’s a great position to be in as you get to see a lot of different business problems and solutions. That’s also sometimes a not-so-good position as you see people struggling, often with the same problems, and coming up with solutions that can vary wildly in both approach and effectiveness.

In BizTalk-land, nowhere is this as evident as around deployment. Why, I don’t know, but many people seem to struggle with it. Developers will focus on making the solution work, and then suddenly realize they need to deploy, and wonder how they will go about doing that. This made more complex as BizTalk solutions can, and often do, span a wide range of technologies.

The BizTalk product team has come up with a great deployment story. This has not always been the case, but it certainly is now. We have all the bits and pieces we need to be able to implement highly-repeatable deployment packages. However, many developers seem to either not realize that, or they’re not in a position (due to budgets and tight deadlines) to take the time to “do it right”.

I would argue that not taking the time to implement a 100% repeatable build process is something that you CAN’T AFFORD to skip. The ultimate cumulative costs, in ghost-chasing troubleshooting, production outages, and lost productivity can far outweigh the up-front costs of implementing a highly-repeatable, reliable and effective build process. In some shops it may be OK to hand an IT pro a deployment script that has 15 manual steps, however, I’d rather not rely on a human to ensure that every step happens in the prescribed sequence. What if you miss step 12?

I know a lot of others (such as Scott Colestock) have done great focused work in the area of deployments. I embarked on this path somewhat by accident. I was on a client project where we were migrating MSIs, BizTalk’s preferred unit of deployment, between environments. I was doing this by exporting an MSI from the admin tool. One day, I forgot to update a binding file (a resource included with the MSI), and proceeded to chase ghosts for a little while when my import was nattering about ports I knew no longer existed. Frustrated, I promised myself this would never happen to me again, and I wrote a little batch file that would automatically update the binding resources for me, I wouldn’t have to remember, I’d just run an “UpdateBizTalkResources.cmd” script, and magic would happen.

That’s how it began, and it just kind of grew organically from there. This blog post is not about how it ends, but I want to share where I am at now. Ever project adds to this, and it has been an iterative process spanning several projects over the past couple of years.

So where am I at? At a client site last year I was able to take a somewhat simple application, and generate an MSI that reduces the deployment time of that robotics-control BizTalk solution to just a few minutes. Everything is scripted, everything is repeatable. At another client site last year, I took a solution that spans perhaps 20 BizTalk projects, and reduced creation of the MSIs (including compilation, etc) to running a series of scripts. Elapsed time to re-gen the 8 MSIs is under 15 minutes, deployment to a green-field pristine BizTalk environment, also under 15 minutes, for all 8 MSIs (which generate 5 separate BizTalk applications). The IT guys on that particular project loved me, as I took their deployments from being a two day "hope this works" process to a 15 minute highly-repeatable process with only a handful of steps.

To those fortunate few among you that have the luxury of being able to spend the time to implement highly-repeatable, highly-scripted, as-touch-free-as-possible build processes, this may seem pretty routine. However, a lot of BizTalk shops don’t have this degree of process implemented.

For the rest of you, I am posting my current script (with some client info removed, removed items are marked by "[" and "]"). Most of it should be self-explanatory, but at a high level, it:

  • Creates a log file. All steps that occur, and their results, are recorded in the log
  • Compiles the SLN file by calling DEVENV
  • Removes the existing BizTalk app and uninstalls it (if it exists) to ensure a clean “not tweaked by a developer” build
  • Creates a BizTalk application
  • Adds the resources (including binding files for each environment)
  • Exports an MSI

In some cases, you’ll need to do more when the application installs, which you can handle with pore and post-processing scripts. For example, in one case, I needed to move DLLs created by the SAP adapter into a specific folder. Just to make it challenging, the target folder changed with environments. Fortunately, I could detect the environment by querying an environment variable, and move the file accordingly. All of that was transparent to the IT Pro who just ran the MSI. In another case, all solution DLLs needed to be put into specific folder locations. In yet another case, while working on the ESB Guidance, Marty, Tom and I wrote scripts that automatically did everything from creating user accounts and app pools through to creating virtual roots and assigning app pools. Post-processing scripts are a powerful tool, you can do a LOT there.

In practice, I develop this script in my development VM. When the time comes to deploy to the integration environment (pre-QA/UAT), I am actually doing my first pass at testing the build/deploy process. Usually, the REAL MSI is created when the script is run on a "build server". That MSI moves into QA. If everything succeeds and is accepted in QA, then that same MSI (don't re-generate!) moves into production.

I hope you’ll find the techniques used below help improve the quality and repeatability of your builds, and help to simplify your build and deployment process. As always, I'd welcome any comments/thoughts you all may have on how this can be further improved.

---------------------------

 

@echo off

mode con cols=100 lines=120

CLS

SETLOCAL

SET APP_NAME=[name]

SET BIZTALK_APP_NAME=[app name]

SET BinPath=source code\bin

SET  BasePath=[path]\Source Code

SET LOG_LOCATION=%CD%\LogFile.txt

REM Uncomment the following line to echo everything out to the screen

REM set LOG_LOCATION=con

SET Database="BizTalkMgmtDb"

SET Server="."

echo ##################################################################################### >> %LOG_LOCATION%

echo %DATE% %TIME% Running %APP_NAME% build script >> %LOG_LOCATION%

echo ##################################################################################### >> %LOG_LOCATION%

echo Setting up...

echo ############# >> %LOG_LOCATION%

echo Setting up... >> %LOG_LOCATION%

echo ############# >> %LOG_LOCATION%

CALL vsvars32.bat

echo Building....

echo ############# >> %LOG_LOCATION%

echo Building .... >> %LOG_LOCATION%

echo ############# >> %LOG_LOCATION%

cd %BasePath%

echo. >> %LOG_LOCATION%

echo ********************************************************************************************** >> %LOG_LOCATION%

echo *** Working in directory: %CD% *** >> %LOG_LOCATION%

echo ********************************************************************************************** >> %LOG_LOCATION%

echo. >> %LOG_LOCATION%

DEVENV ..\..\%APP_NAME%.BizTalk.sln /build Deployment >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

SET msg=Could not build Visual Studio solution

GOTO ErrorRoutine)

 

rem To ensure we have a clean environment free of any legacy or manually added resources, try to remove and uninstall the app

echo Cleaning environment....

echo ######################## >> %LOG_LOCATION%

echo Cleaning environment.... >> %LOG_LOCATION%

echo ######################## >> %LOG_LOCATION%

BTSTask UninstallApp -ApplicationName:%BIZTALK_APP_NAME% >> %LOG_LOCATION%

BTSTask RemoveApp -ApplicationName:%BIZTALK_APP_NAME% >> %LOG_LOCATION%

BTSTask AddApp -ApplicationName:%BIZTALK_APP_NAME% >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

echo ####################################################################### >> %LOG_LOCATION%

echo #### Warning: BizTalk application %BIZTALK_APP_NAME% already existed. >> %LOG_LOCATION%

echo #### Application is being 1-uninstalled and 2-removed >> %LOG_LOCATION%

echo ####################################################################### >> %LOG_LOCATION%

)

 

echo *** Adding assemblies generated by SAP adapter to %APP_NAME% resources. The post-processing script will move it to the right folder (destination varies by environment)
BTSTask AddResource /ApplicationName:%BIZTALK_APP_NAME% /Type:System.BizTalk:BizTalkAssembly /Source:"C:\Program Files\Microsoft BizTalk Adapter v2.0 for mySAP Business Suite\Bin\Z_MATERIAL_SPECS.dll" /Destination:"%%BTAD_InstallDir%%\Z_MATERIAL_SPECS.dll" /Server:%Server% /Database:%Database% /Overwrite >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

SET msg=Could not add SAP DLL to BizTalk application

GOTO ErrorRoutine)

 

echo Adding binding files...

echo ####################### >> %LOG_LOCATION%

echo Adding binding files... >> %LOG_LOCATION%

echo ####################### >> %LOG_LOCATION%

BTSTask AddResource /ApplicationName:"%BIZTALK_APP_NAME%" /Type:System.BizTalk:BizTalkBinding /Server:%Server% /Database:%Database% /Overwrite /Source:"..\..\build\Bindings\%BIZTALK_APP_NAME%_Bindings_DEV.xml" /Property:TargetEnvironment="Development" >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

echo #################################################################### >> %LOG_LOCATION%

echo #### Warning: could not find DEV binding file >> %LOG_LOCATION%

echo #################################################################### >> %LOG_LOCATION%

)

BTSTask AddResource /ApplicationName:"%BIZTALK_APP_NAME%" /Type:System.BizTalk:BizTalkBinding /Server:%Server% /Database:%Database% /Overwrite /Source:"..\..\build\Bindings\%BIZTALK_APP_NAME%_Bindings_QA.xml" /Property:TargetEnvironment="Q.A." >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

echo #################################################################### >> %LOG_LOCATION%

echo #### Warning: could not find QA binding file >> %LOG_LOCATION%

echo #################################################################### >> %LOG_LOCATION%

)

BTSTask AddResource /ApplicationName:"%BIZTALK_APP_NAME%" /Type:System.BizTalk:BizTalkBinding /Server:%Server% /Database:%Database% /Overwrite /Source:"..\..\build\Bindings\%BIZTALK_APP_NAME%_Bindings_PRD.xml" /Property:TargetEnvironment="Production" >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

echo #################################################################### >> %LOG_LOCATION%

echo #### Warning: could not find PRD binding file >> %LOG_LOCATION%

echo #################################################################### >> %LOG_LOCATION%

)

echo Creating MSI...

echo ############### >> %LOG_LOCATION%

echo Creating MSI... >> %LOG_LOCATION%

echo ############### >> %LOG_LOCATION%

BTSTask ExportApp -ApplicationName:%BIZTALK_APP_NAME% -Package:..\..\build\%BIZTALK_APP_NAME%.msi >> %LOG_LOCATION%

IF %ERRORLEVEL% NEQ 0 (

SET msg=Could not export MSI

GOTO ErrorRoutine)

GOTO :End

:ErrorRoutine

echo #################################################################### >> %LOG_LOCATION%

echo #################################################################### >> %LOG_LOCATION%

echo Error: %msg% >> %LOG_LOCATION%

echo #################################################################### >> %LOG_LOCATION%

echo #################################################################### >> %LOG_LOCATION%

GOTO :End

:End

echo. >> %LOG_LOCATION%

echo. >> %LOG_LOCATION%

echo ##################################################################################### >> %LOG_LOCATION%

echo --> Completed: %DATE% %TIME% Running %APP_NAME% build script >> %LOG_LOCATION%

echo ##################################################################################### >> %LOG_LOCATION%

Technorati Tags:

Tuesday, January 22, 2008 #

As I posted here, I had the honor of doing an MSDN Geekspeak last month with Lynn Langit and Glen Gordon. It was a lot of fun, a very casual conversation, covering two of my favorite areas of sub-specialization: BizTalk BAM, and ESB.


The recording is now available at http://channel9.msdn.com/ShowPost.aspx?PostID=369700.

 

As a follow-up, to that presentation, among other things I showed a higher level API I had created over the BAM API. One of the audience members asked if I could publish it, so.... here you go!

 

Please note that I am *not* trying to re-create a SOA Software or AmberPoint products. Those products both offer a huge powerful toolkit that any enterprise engaged in service adoption should be aware of, and should explore. However, there are times when just simple metrics tracking is enough, or, perhaps you want to surface some real-time data about a subset of the services in your enterprise. If that's the case, then the API presented here is a perfectly viable option.

 

The API is, as you can see, really simple, it just serves as a layer of abstraction that makes it easier for service developers to embed trackpoints in their code (without putting in their own BAM API calls, which requires some knowledge of he underlying activity definition). However, you need to ask yourself if that's what you really want to do. For instance, if you're using WCF, you could use BizTalk Server 2006 R2's WCF interceptors instead, which would allow you to track services by annotating the channel. Changes to the tracking strategy would mean configuration changes, not code changes and redeployments. By the same token, if you're capturing metrics from  BizTalk orchestration, putting in API calls is generally not a good thing as it means that should anything change (such as the data you want to track), you will have to revisit each orchestration that calls the API make a code change. If your data originates in an orchestration, it would be preferable to use the Tracking Profile Editor to create the link between the logical tracking profile and the orchestration implementing the service. This way you get "touch-free" tracking, and can change the tracking without code changes. That's not a generic statement though, there are certainly times when it's both appropriate and required that you call the BAM API from inside an orchestration. Clear enough? :)

 

The BAM APIs are in the Microsoft.BizTalk.Bam.EventObservation DLLS.

I have provided three methods:

  • TrackServiceStart
  • TrackServiceEnd
  • TrackServiceException

In order for this to work, we need to correlate a service end to a corresponding service start. In order to do that, the TrackServiceStart method returns a GUID that represent the "token" for this instance of service tracking. The subsequent TrackServiceEnd and TrackServiceException methods will present this token so we know what to update.

The TrackServiceStart method is overloaded:

image

Once a service has started, it SHOULD either end well, or throw an exception (and it it doesn't end at all, then you need to schedule cleanup jobs that will remove old incomplete instances):

image 

I hope this post helps you get more out of your BAM.

 

Technorati Tags: ,,,