Just been working on EDAM ( my event driven architecture product) and wanted to note down and restate the long term goal (in addition to being a great eventing system).
The goal of EDAM is for people to be able to quickly add programs to the enterprise and to provide a fast event driven service to make this happen . Note i avoided the term framework as i want this to be usable with no dll linked though we will provide one later to make it even easier.
Remember when we used UNIX commands such as
cat file* | tr -cs '[A-Z][a-z]' '\012' | sort | uniq -c | sort -nr | more
these are incredibly powerful for experienced users and i wanted something similar so you could write enterprise applications and redirect them FAST.
What i want to do is something like
string ProcessOrder(Order order) { return order.ToXml()) <OrderService.NewOrderEvent("/orders/order[Customer=xyz]" > LogEvent(Cat = "Check For Orders from customer xyz" , result;
string ProcessOrder(Order order) { if ( order.Amount> 1000000) return order.ToXml(); else return null; ) <[OrderService].NewOrderEvent("/orders/order[Customer=xyz]" > [LogService].Log(Cat = "Check For Big Orders from customer xyz" , result; > [EmailService].Email(result , "LargeOrder receviec" ,"person who wanted to know"@nobody.com
Basically take the input from a specified event and send it to a dynamically service. The code would be compiled and loaded into a DB , a dynamic host would automatically load this service and keep it running,
With powershell ( and UNIX) adminstrators have been using this power for a long time ( more for reviewing data then events though ) extending it to business events is something else.
It could lead to much quicker small applications being developed , the above example would normally require an application to be written but with some Enterprise infrastructure things could be written really quickly, This is not really posisble with tradition systems as DB access is normally tightly controlled ( for good reason) and there are no events to trigger things and polling would be inefficient . Note EDA does need protection against a loop
This would be bad.
Order ProcessOrder(Order order) { return order) <OrderService.NewOrderEvent("/orders/order[Customer=xyz]" > OrderService.AddOrder(result);
Filter and Replace
In many cases i thought the flexability of EDA can be very usefull in critical systems such as defence ,finance markets etc , remember in the first gulf war the Ewacs ( control planes for the whole air war) shut down because they were overload. They had people look at the bugs and uploaded a new version the next day ,but this sort of thing can cost the lives of many people .
Even if it is some sort of fundamental problem like the hardware cant handle the load ,with EDA i could have build a simple service that subscribed to requests from the first service and have all the systems point to the new service. This service would consist entirely of an xpath expression which would eliminate excess data by distance or some other dependency.
So we need to change the current event to move to a different port and put a new service which filters events to a new port.
Filter and Extend
Similarly to the above if you had extra computers and were overloaded you could add more with no impact on the system just some reconfiguration
Print | posted on Sunday, April 05, 2009 5:16 PM