mmm long post …
I'll start with few words about myself to make the picture clearer. For the last 5 years I deeply engaged with competitive intelligence. Competitive intelligence is actually application of intelligence for the business community. Competitive intelligence aim is to forecast events, intensions, movements, etc' of people and organizations that might help your enterprise to make the right decisions. To reach competitive intelligence conclusion competitive intelligence software need to interact with all existing and upcoming enterprise software. The interacted software could be interior and exterior enterprise software's. Using the gathered data from enterprise systems and exterior systems CI application can make it own analyze and reach CI conclusion. As you probably guess implementation of such software is always force you to integrate with enterprise existing systems.
Integration, from my point of view, is not only to consume data or logic from other systems. Consuming of visualization aspects, especially if those visualization aspects implements visualization algorithms, are also desire when integrating to other systems.
So beside enterprises systems that I saw, I need to create my solution in such a way that I can use it in any organization regardless of the implementation tools and technologies that they choose. I decide to use HTML as the protocol that I will use to implement integration of my CI solution with existing and upcoming enterprise systems. Using HTML I can easily combine several data, logic and even visualization into one page and display it to the end user. I start to develop ASP based solution and migrate to ASP.NET as soon as it was available (I also use to help others and wrote couple of articles thus get ASP.NET MVP.). CI solutions aren’t simple, they usually collection of components develop as n – tired application. As complex web application I want to use application server and other enterprises services that I saw my clients implementing in their systems.
The first service that I looked for is application server. You can't create complicate software solution based on hundreds and above classes, without any application server that implement inversion of control and aspect oriented programming. It doesn't matter if you create web or client server application you still need application server to deal with your classes. You need your application server to implement any level of container services. Container actually activates objects for you (by request) thus can implement interceptions that can activate predefined services (such as object pooling, transaction, clustering, security, auditing, logging, message driven components, persistence and others) or custom services for your classes. COM+ is actually build with inversion of control and aspect oriented programming and .Net introduce attributes that even support better aspect oriented programming. The problems are:
- COM+ is COM implementation that hurt .Net performance and there isn’t any .net container implementation yet.
- There are set of pre-defined services that COM+ container introduce and they are poor (for example there isn’t any clustering services) and you can't extend them with your own services.
- Java implementation introduces managed extension that control objects and contains data about object and object procedure monitoring. COM+ monitoring and management is poor comparing to java implementations.
- Java application servers also come with naming services and proxies. Naming services are like UDDI they let the client get instant of class by the class name. In contrast with .Net that let us create instance from class just by referencing class assembly, naming services let us get object from remote storage just by its name. This is very important service for enterprise systems where one component that one creates is used by all other systems. Using name services when I change my components all other systems don’t need to do anything in order to get the new instance (no recompiling or mapping reference in config files).
- Application server don’t just use containers for server side classes the containers also used for object proxies returned by naming servers, thus enable container services to client side proxies as well as server side objects.
- Application servers usually perform deployment task for hosting classes. For example application server will create proxy for hosted class and register it in the naming services.
Application servers are important but not the only enterprise needs that java community creates proper solution whether as commercial tool or open source project. Most of those solutions got specification developed by sun and can be found at http://www.jcp.org. I'll mention just some of them that I see the need.
- ORM tools. Yes I know that Microsoft is going to ship object spaces with Whidbey but why not to ship such a tool with the first version or at least publish specification of ORM tool. If you are moving your development tool to OO why don’t you deal with mapping of relational database to objects?
- In memory database. Once there was IMDB but it gone …. On the other hand Java got JavaSpaces spec. with implementations such as GigaSpaces. IMDB disappear but the need for in memory database still exists.
- Rule base. I hope that I don’t have any mistake here. While Java community develops spec for rule base engine and Open source projects that implement rule base engine start to emerge. All I can find in the Microsoft community is that article on MSDN (http://msdn.microsoft.com/architecture/journal/default.aspx?pull=/library/en-us/dnmaj/html/aj1rules.asp).
As I post earlier even MVC implementation of ASP.NET is an example for the difference attitude to enterprise development. While Microsoft published application block that implement MVC where the controller and the viewer are the same class Sun implements MVC with separate viewer and controller in their new development tool (that support now post back).
As I already said I don’t think Microsoft should develop all of those solutions but I really think that they have to do something in order to push more enterprise oriented solutions to their development products.