|
Thank you for the article. It seems to be focused more on the transaction side. However, I will look into the COM+ serviced components further to make sure they'll meet all my requirements. The modules that will be managed by the service will work independently of one another and additionally the workflows they run will work independently of one another.
The ultimate question of reliability will come when I determine what happens when an OOM exception occurs in the COM+ serviced component. The last thing that can happen is that the service is corrupted in any way shape or form.
|
|
|
|
|
tgrt wrote: when an OOM exception occurs
an Out Of Memory exception?
tgrt wrote: The last thing that can happen is that the service is corrupted in any way shape or form.
Again without knowing more about your requirements I'm just guessing. This is because you need to execute modules you don't trust? If the supplied modules don't handle their own errors what are you going to do to ensure against corruption? So you handle the exception and then what?
|
|
|
|
|
You're correct, when I say OOM, I mean out of memory condition which might be an out of memory exception or stack overflow exception, etc. Anything that fits within a broad category of non-application based exceptions.
I'm trying to provide enough information without laying out all of the requirements which is obviously not possible within this medium.
The executed modules will trusted in the context of security, but not within the context of stability. For example, I'll provide the controlling service (through whatever that turns out to be) and several executing module. The user, being a system administrator or developer type, will choose which ones they need and create workflows that execute based on criteria dependent on each executing module. The user can also extend the solution in such a way as creating their own executing modules based on a common interface.
What I don't want is for a executing module to fail and bring down other executing module or even worse the service itself. The service will monitor the health of the executing modules and if there is a failure it will cleanup anything that is necessary and start a brand new shiny executing module to pick up where the old one left off.
|
|
|
|
|
tgrt wrote: What I don't want is for a executing module to fail and bring down other executing module or even worse the service itself. The service will monitor the health of the executing modules and if there is a failure it will cleanup anything that is necessary and start a brand new shiny executing module to pick up where the old one left off.
Yes the Com+ Application Server does all of that
|
|
|
|
|
led mike wrote: Yes the Com+ Application Server does all of that
Can it also provide services such as centralized configuration settings (including database connection strings), centralized tracing, et al. to each individual module?
It occurred to me that one of the aspects of this application may not be clear. Logically this is a single application that will run by itself with no user interaction. It will essentially be responding to some external event -- the definition of the event will vary from module to module. My premise for separating the modules in a physical manner is for the purpose of reliability, but a physical separation is not a requirement in of itself.
The simplist architecture is that the service would create the individual classes without the host and manage them; however, in that scenario an OOM condition would bring everything down.
|
|
|
|
|
Happy New Year tgrt!
I see the Design and Architecture forum has returned. I did not ignore your last post, the forum was not available after they launched the new version of the site.
How is your project going?
Do you need any further assistance?
tgrt wrote: Logically this is a single application that will run by itself with no user interaction.
That is what the COM+ Application Server is.
tgrt wrote: the definition of the event will vary from module to module.
Yes, each COM+ component defines what it does and how it does it.
tgrt wrote: however, in that scenario an OOM condition would bring everything down.
The COM+ server is fairly mature as it first surfaced back in like 1996 or something like that. I imagine you will find it quite robust in the latest versions of the Microsoft Server Operating Systems.
|
|
|
|
|
I looked at the MSDN documentation for the COM+ components. I may be missing something with what is probably just a superficial look, but it doesn't look like it's going to do what I want.
My modules will be controlled by the service in so much as a start/stop basis. The service will also centralize tracing, monitor the health of the modules, and provide some common services such as configuration settings. However, each module will be responsible for running any number of workflows (whether through WF or another mechanism) based on different physical events -- the specific type of the module will determine what and how.
|
|
|
|
|
Having been only introduced to it last night, I will tentatively suggest looking at WCF as a more focused, more current, alternative to COM+. Don't be misled by the Communications term, which tends to conceal its role as a services infrastructure.
Calling all South African developers! Your participation in this local dev community will be mutually beneficial, to you and us.
|
|
|
|
|
Interesting. I wasn't aware WCF was in that role. I have one of the Microsoft Press books on WCF sitting here that I haven't had a chance to go through. I'll have to look at that.
|
|
|
|
|
Well I'm not at all surprised that without complete requirements, which is not actually possible in text messaging, you can slightly miss the target, if indeed I have. More generally my point is that there is very little need to build your own Service these days. I see you are now looking at WCF, I haven't looked into that yet so I have no idea how it relates to my point of not needing to author your own hosting process.
In terms of reliability and scalability I would require a proven concrete reason to author my own service rather than use an existing hosting platform from the current Windows Server products. Keep in mind it's not because I am apprehensive about writing a service, I have authored so many services since NT4 that I can't even remember them all. Back in 2000 I lead a project that developed a proprietary application server ( long Dilbert story ) in Java so I have no fear of doing it but still, not now, not without a proof.
|
|
|
|
|
Fair enough. Most of my development has been with client/database development. This is my first non-superficial plunge into Windows services whether that be with Enterprise Services, WCF, et al.
|
|
|
|
|
I'm curious about...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
CPallini wrote: Did anyone ever implemented flyweight design pattern?
Yes
|
|
|
|
|
Could you, please, detail your experience? For instance, what are
(1) The kind of project requirements that made appealing that pattern.
(2) The design issues you faced.
Thank you in advance.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
CPallini wrote: (1) The kind of project requirements that made appealing that pattern.
Not normally a requirements based reason. All things are (or should be) traceable back to a requirement but the flyweight pattern is mainly about optimizing memory/resource usage, which is not a requirement that a software developer should need. A generalization of a design scenario is the system will need to use the same small number of items I very large number of times, potentially infinitely. Does that help?
CPallini wrote: (2) The design issues you faced.
None. It's a very simple design, all of the best ones are.... very simple.
|
|
|
|
|
led mike wrote: Does that help?
Yes.
Thanks a lot. I really appreciate your replies.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
I've never heard of it. What is it? Sounds like some kind of lightweight design approach.
"The clue train passed his station without stopping." - John Simmons / outlaw programmer
|
|
|
|
|
Paul Conrad wrote: I've never heard of it. What is it? Sounds like some kind of lightweight design approach.
...for a large numbers of objects, see, for instance http://en.wikipedia.org/wiki/Flyweight_pattern[^]
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
[my articles]
|
|
|
|
|
I´m trying to create a windows application that will be able to store data in a database. Both the application and the database have to be in one installation package and the end user has to be able to use the application correctly without the need to install anything else(database server,...). Can anyone help me with this? Which kind of database should I use?
I was thinkink about using MSSQL 2005 Exress Edition and then just attached the .mdf file to the application, but I´m not sure if this is the best solution. Is it possible to access and work with .mdf file on a computer, that does not have the MSSQL server installed?
Or what is the best solution for this problem?
cellardoor
|
|
|
|
|
SQL Server Compact Edition[^] is what you need. (Express still needs to be installed.) Compact is just a couple of dlls that let you use a single .sdf file as a database. Similar limits to Express (4gig db limit etc) - but it is also missing stored procs.
Then use this[^] to handle your data access and the whole data end of your application is done for you.
Your other option if you don't actually need the databasey features of a database is to use a prevalence mechanism[^] that stores plain .net objects for you.
|
|
|
|
|
Thank you, I´ll try the SQL Server Compact Edition.
cellardoor
|
|
|
|
|
|
I have a hierarchy of objects that share some attributes, e.g. both my parent Record and Column objects have a columnDelimiter property. I want this property on the Column object to default to the same property on the Record object, until specified on the Column object. What is the best way to go about this? I could give each Column a reference to the Record it belongs to, but this seems not quite right to me. My other option is to have the Record act as a ColumnFactory, setting the columnDelimiter value on each Column it creates, until a set accessor on Column optionally overrides that default value.
Calling all South African developers! Your participation in this local dev community will be mutually beneficial, to you and us.
|
|
|
|
|
I am having trouble understanding your problem. Can you provide a scenario where the column delimiter is different from the record delimiter?
|
|
|
|
|
No, maybe that was a bad example, but I'm trying to build in forward compatibility with SSIS, and their columns all define their own delimiters. However, my problem is not one of Column specified column delimiters and Record specified column delimiters; it is one of child objects 'inheriting' property values from their parents, until or unless the child object overrides the value.
I do have exactly the same requirement for individual Columns to have an option to quote their contents, which overrides the 'quote contents' option for the Record.
Calling all South African developers! Your participation in this local dev community will be mutually beneficial, to you and us.
|
|
|
|