Tag Archives: DSLs

Don't call store.Dispose() if you didn't create it!

So, I’m happily plugging along, adding the ability to import a WSDL file into one of the DSLs for a new Software Factory we’re building at work. And after reading and re-reading the documentation and the DSL Book, I decide I need to call store.Dispose() in my code because I’m finished adding ModelElements to the model and I am leaving the command handler. You know, be neat and tidy when you exit a function dispose of any COM+ interfaces you’ve might have AddRef’d, etc.

 

So now I’m running the DSL and everything is working like it did before my single line of code, but now after adding the ModelElements to the model POOF! my model explodes! and I’ve lost everything in the model. I try it again a couple more times, kinda like pushing the car back up the hills to see if the brakes will fail for a second time after they did the first, you know typical programmer mentality and sure enough POOF! POOF! POOF! it keeps doing the same thing over and over.

 

So I trace through the code and notice that after I execute the store.Dispose() and exit the function, I get rerouted to the DocData class and it is trying to save the file and throws an Exception because the diagrams no longer exist.

 

So I go back and review my code and notice that I am not creating a new store and loading in the model, but I’m using the existing store that is opened by the DSL Editor and when I call store.Dispose(), I’m pulling the rug out from underneath me, the editor and Visual Studio as well.

 

So, I removed the single line of code that caused me an hour’s worth of grief and everything is working just hunky dory.

 

I guess it will always be engrained in my head, that unless I’m actually creating the store, I shouldn’t be disposing of it ,otherwise I’ll cause terrible things to happen.

 

Hopefully this will keep the rest of you from making the same mistake I did.

 

 

Adventures in Extending the Service Factory – Part 2

Here’s a handy tip when you are trying to learn how the components of the Service Factory works. I’ve found it very useful over the last couple of weeks.

 

Since the Service Factory now gets registered under the Visual Studio Experimental Hive you can configure the solution so you can debug it. If you are familiar with debugging DSLs, this should be nothing new. Just follow the steps below:

  1. 1. Set the Service Factory Guidance Package as the Start-Up Project by right-clicking on the project and selecting “Set as Start-Up Project”.
  2. 2. Change the Service Factory Guidance Package Project’s debug settings to launch Visual Studio under the Experimental Hive:
      1. a. Right click on the Service Factory Guidance Package Project and select “Properties”.
    1. b. Select the Debug Tab
    2. c. Configure the Start Action to Start External Program and C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.exe or where ever you have installed Visual Studio for the program.
    3. d. Set the Start Options, Command Line Arguments to /rootsuffix Exp

 

Now you can set breakpoints in the Service Factory code and press F5 to walk through the code in the debugger.