Before Web Services, there was CORBA. Before CORBA, there was DCOM. Before DCOM, there was RPC. Before RPC, there was BSD sockets. Before sockets, there were databases. And as it was in the beginning, so shall it too be in the end.
The only systematically successful strategy in the history of computing is databases. I have discovered more and more lately that integration using a database is well-defined (DDLs – a WSDL that works!), flexible (views and triggers can hide many old sins), well-supported (today, powerful Object-Relation Mapping tools should be de regur for any sensible project), and performant (sooner or later, you’re gonna hit the database anyway). Using modern database features it can be made secure and scalable as well. In the end, databases are the best thing since, well, since databases.
I want to write a series of blog posts detailing strategies I use and explore to make database integration work. For now, let me just share my vision with you: One huge enterprise database that appears flat to any application that uses it. All applications in the enterprise using the single database instance. This vision has many practical issues in terms of performance, security, maintainability and understandability. I will spend the blog posts exploring these issues.
First, though: Where is integration using databases applicable, and how does it relate to the main buzzword of the day, Service Oriented Architecture (SOA)?
Database-based integration is only applicable for applications that are not distributed across multiple organizations or distributed widely within the same organization. This is what we can call “application-to-application” (A2A), as opposed to “business-to-business” (B2B). For B2B, technologies associated with SOA are still going to be your best bet. Also, I would not use database integration from desktop clients (“2-tier architecture”). I am not sure whether this is just because everyone has been so excited about the 3-tier architecture for so long. Maybe you could make it work. However, I don’t much care for desktop clients, so I will leave this subject to someone else.
However, when the “services” are just internal services between different parts of my application portfolio, I think integration on the database layer is greately underused.