Last month I ordered Jimmy Nilsson’s book Applying Domain Drive Design and Patterns along with a couple of others including Patterns of Enterprise Application Architecture, they arrived about a 2 weeks ago.

Finally this week I have started to read ADDP and have been struggling to put it down to do anything else. IMHO this is one of the best Technical books ever written. As a newbie to DDD there is no better starting point than with this book.

Jimmy’s style of writing is very easy to read and understand. The content of course is brilliant, I have just finished reading chapter 2 and feel a few years wiser.

My advice to any developer looking for enlightenment is to read Jimmy’s book. Perfecting the use of Domain Driven Design is not something that comes easy. Even in the smallest application the value of using it is immense. I have a long way to go to become a good developer, and reading this book is going to be a big help in that process.

Technorati Tags:

Share/Save/Bookmark

Mary-Jo shares some of her insight into some of the news around Oslo that may be announced around PDC 08. What interests me is that in my last post I speculated that the Process Server could be some sort of service bus implementation, which seems to be spot on. Yes “Dublin” is the code name for Microsoft’s Distributed Application Server, but hey is that not just a fancy name for or .

I guess when PDC rolls around in a few weeks and more news around what Oslo is and when the bits roll out to developers and architects to see, touch, feel and smell what the CSD and Dev Division guys have come up with is when the real questions need to be asked. All well and good to speculate, I just hope that some parts of the Oslo effort will touch on some of my desires.

 

UPDATE: Mike Taulty has posted links to a whitepaper and a screencast that explain more details about .net 4.0

Technorati Tags: ,,,,

Share/Save/Bookmark

, , , ,

A few weeks back in that post I suggested the following

I imagine it to be a tool that enables these Information Workers to use some of Oslo’s features much like using Visio, but instead of static elements there are dynamic objects drawn from the repository that perform a specific business purpose, when put together by the domain expert enables them to perform a task that would have required a developer to perform otherwise.

As it turns out I may not be that far from the truth, or some part of it. Ron Jacobs interviewed David Chappell at Tech.Ed just past and in that conversation David divulges a few interesting bit of information.

Two things that caught my attention was the “Lifecycle Manager” and the “Process Server”.  But here are my two predictions about what these two things could be. (Yes I am going out on a limb)

The Lifecycle Manager – A long running workflow or Saga manager.

The Process Server – A Service Bus implementation.

The video  of Ron Jacobs and David Chappell along with David’s loose timeline/ roadmap to Oslo is after the Jump

Read the rest of this entry

Share/Save/Bookmark

, , , ,

Based on Kavita and Wenlong’s posts (they work with Doug Purdy and Don Box) the .net framework v4 is going to be the building blocks for Oslo.

With .net 4 they are not touting it to be a additive release like 3.0 and 3.5.  Wenlog says that 4.0 will be the next major release since 2.0,

  • Major improvements for WCF and WF
  • Built in dynamic language support
  • adding support for a new language (dynamic) for Oslo’s “model driven” programming

But to get the full picture we are going to have to wait for PDC, when the first CTP bits should be available. I can only predict exciting times ahead, as always more things to learn, I guess its time to open Robert Pickering’s book

Technorati Tags: ,,,,

Share/Save/Bookmark

, , , ,

Oslo has been shrouded in a lot of mystery. Most information on the about Oslo is still speculation. When people think Oslo they think

  • Biztalk V Next
  • Emacs.net
  • Microsoft ESB
  • All of the above and more…

IMHO I believe it to be everything and more, but what proof did i have to support it? Well Doug Purdy announced on his blog about hiring for This raises the question of why another IDE/Text Editor when Visual Studio is very powerful, unless you have tried working with XAML. I digress.

Last night there was posts from Doug Purdy and Don Box that began to unveil bits of what make Oslo.

Doug Describes it as three simple things.

  • A tool that helps people define and interact with models in a rich and visual manner
  • A language that helps people create and use textual domain-specific languages and data models
  • A relational repository that makes models available to both tools and platform components

and Don says that Olso is being created with a couple of intentions

1. We’re making it easier for people to write things down in ways that make sense for the domain they are working in – the common term for this in the wild is modeling.

2. We’re making the things people wrote down accessible to platform components during program execution.

 

Based on this I would take a punt and say that Oslo is going to create a platform for developers to create DSL’s that will be stored in a repository, this DSL is then retrieved and consumed by a visual tool to create on the fly mash-ups of their domain. The key part here is that the visual tool will be something that can be used by Information Workers, Business Analysts, and Project Consultants.

I imagine it to be a tool that enables these Information Workers to use some of Oslo’s features much like using Visio, but instead of static elements there are dynamic objects drawn from the repository that perform a specific business purpose, when put together by the domain expert enables them to perform a task that would have required a developer to perform otherwise.

This is something that is peeking my interest. Wow I can imagine every medium to large business needing something like this. I cant wait for PDC anymore, I just wish I could be there, then again that’s what a Webcast is for.

Doug calls this the “end of the beginning” of his vision of enabling everyone to be a programmer if they can pull something like this of then he may be correct. But I will wait and hold my judgement till I can play with the Bits that should be available at

 

Technorati Tags: ,,,,

Share/Save/Bookmark

, , , ,

Service Broker has a really good C# wrapper interface that comes part of the samples on Codeplex. If you need to work with service broker objects in the managed world then I would recommend using the interface from the .

Most samples I have seen demonstrate communicating within a single database, and hence use the SqlTransaction Class The code below is an example of sending a message to a SSB Service  in a SqlTransaction.

   1: private void SendMsgToSSB()
   2: {
   3:     SqlConnection conn = null;
   4:     SqlTransaction tran = null;
   5:     Conversation dialog = null;
   6:     Service client = null;
   7:     string connString = "Persist Security Info = False; Integrated Security = True; Initial Catalog = MyServiceBrokerDB; Data Source = .; Connect Timeout = 30;"
   8:     try
   9:     {
  10:         conn = new SqlConnection(connString);
  11:         conn.Open();
  12:  
  13:         // Begin a transaction
  14:         tran = conn.BeginTransaction();
  15:  
  16:         // Create a service object
  17:         client = new Service("MyCoolService", conn, tran);
  18:         client.FetchSize = 1;
  19:  
  20:         // Begin a dialog with the MyCoolService
  21:         dialog = client.BeginDialog(
  22:             "MyCoolServiceTarget", null, "DEFAULT",
  23:             TimeSpan.FromMinutes(1), false, conn, tran);
  24:  
  25:         // Create request message
  26:         string outgoingBody = "my really cool msg that broker understands";
  27:         Message request = new Message("DEFAULT",
  28:                                       new MemoryStream(Encoding.UTF8.GetBytes(outgoingBody)));
  29:  
  30:         // Send the message to the service
  31:         dialog.Send(request, conn, tran);
  32:  
  33:         dialog.End(conn, tran);
  34:         tran.Commit(); 
  35:     }
  36:     catch (ServiceException svcEx)
  37:     {//deal with this pesky service exceptions
  38:     }
  39:     finally
  40:     {//clean up here close connections etc.
  41:     }
  42: }

But in scenarios where the transaction needs to be elevated from a lightweight transaction to one that needs the aid of the DTC the SqlTransaction object is not going to cut it for you.

With a simple change (in bold and italicized) you can then support enlisting in a Distributed Transaction.

   1: public void SendMsgToSSB()
   2: {
   3:     SqlConnection conn = null;
   4:     Conversation dialog = null;
   5:     Service client = null;
   6:     string ConnectionString = "Persist Security Info = False; Integrated Security = True; Initial Catalog = MyServiceBrokerDB; Data Source = .; Connect Timeout = 30;";
   7:     try
   8:     {
   9:         conn = new SqlConnection(ConnectionString);
  10:         if (conn.State != ConnectionState.Open)
  11:         {
  12:             conn.Open();
  13:         }
  14:         conn.EnlistTransaction(Transaction.Current);
  15:  
  16:         // Create a service object
  17:         client = new Service("MyCoolService", conn, null);
  18:         client.FetchSize = 1;
  19:  
  20:         // Begin a dialog with the MyCoolService
  21:         dialog = client.BeginDialog(
  22:             "MyCoolServiceTarget", null, "DEFAULT",
  23:             TimeSpan.FromMinutes(1), false, conn, null);
  24:  
  25:         // Create request message
  26:         string outgoingBody = "my really cool msg that broker understands";
  27:         Message request = new Message("DEFAULT",
  28:                                       new MemoryStream(Encoding.UTF8.GetBytes(outgoingBody)));
  29:  
  30:         dialog.Send(request, conn, null);
  31:         dialog.End(conn, null);
  32:     }
  33:     catch (ServiceException ex)
  34:     { //deal with the exception
  35:     }
  36:     finally
  37:     { //clean up
  38:     }
  39: }

 

Again this code has a small issue what about if there is no Transaction available then sending a message without a transaction could be a bad thing. With one more change its ready to support both scenarios.

   1: public void SendMsgToSSB()
   2:   {   SqlTransaction tran = null;
   3:       SqlConnection conn = null;
   4:       Conversation dialog = null;
   5:       Service client = null;
   6:       string ConnectionString = "Persist Security Info = False; Integrated Security = True; Initial Catalog = MyServiceBrokerDB; Data Source = .; Connect Timeout = 30;";
   7:       try
   8:       {
   9:           conn = new SqlConnection(ConnectionString);
  10:           if (conn.State != ConnectionState.Open)
  11:           {
  12:               conn.Open();
  13:           }
  14:           if (Transaction.Current != null)
  15:           {
  16:               conn.EnlistTransaction(Transaction.Current);
  17:           }
  18:           else
  19:           {
  20:               tran = conn.BeginTransaction();
  21:           }
  22:  
  23:           // Create a service object
  24:           client = new Service("MyCoolService", conn, null);
  25:           client.FetchSize = 1;
  26:  
  27:           // Begin a dialog with the MyCoolService
  28:           dialog = client.BeginDialog(
  29:               "MyCoolServiceTarget", null, "DEFAULT",
  30:               TimeSpan.FromMinutes(1), false, conn, null);
  31:  
  32:           // Create request message
  33:           string outgoingBody = "my really cool msg that broker understands";
  34:           Message request = new Message("DEFAULT",
  35:                                         new MemoryStream(Encoding.UTF8.GetBytes(outgoingBody)));
  36:  
  37:           dialog.Send(request, conn, null);
  38:           dialog.End(conn, null);
  39:           if (tran != null)
  40:           {
  41:               tran.Commit();
  42:           }
  43:       }
  44:       catch (ServiceException ex)
  45:       { //deal with the exception
  46:       }
  47:       finally
  48:       { //clean up 
  49:       }
  50:   }

 

I have also been making a few changes to the interface that I intend to publish shortly.

Share/Save/Bookmark

, , , , ,

A really good article in using on

Share/Save/Bookmark

,