Originally, this weakness is most evident in high volume, real time systems. As the number of Internet/Java based programs increases, it becomes obvious that two tier does not fit well with many Internet/Intranet applications.
For example, most Internet applications need access to relational database, just like two tier client-server applications. The traditional way of granting access to database is to create a new login account for the new user. In a controlled client-server environment, this is fine. Internet/Intranet brings applications into a much less controlled environment with a much broader user base. Database owners become very reluctant to grant access as new login account. They only want to grant restricted, application specific access.
Three tier architecture helps to solve these problems. The idea is to add a middle layer, called middle ware, between clients and servers. Middleware may shoulder communication between clients, perform business logic and control access to servers. Most importantly, middleware gives clients the ability to use servers asynchronously. Clients no longer have to hang while waiting for locks on servers. They can send a request and return to normal activities, only process the reply when it comes.
Ideas of message queue have been explored by companies like IBM and DEC. Both IBM's MQSeries and DEC's DECmessageQ are successful commercial products. However, almost all of these products are huge software, designed for big corporations to distribute information in their sprawling organization. The drawback for smaller user is that these systems have excessively complicated architecture. Both implementation and administration need highly trained technical specialists. Associated costs are prohibitive to smaller users who really only need a much smaller system. Moreover, most of these systems do not fit well with object oriented model and current Internet architecture.
When a message is sent to BambooPipe for delivery, BambooPipe server saves it in its own persistent storage. Once BambooPipe acknowledges the message, the producer client has guarantee that the message will be delivered. Actual delivery is asynchronous. If a consumer has lost contact, BambooPipe server holds the message until the consumer comes back. In the case of BambooPipe server crashing or its host server crashing, BambooPipe startup procedure will recover all pending messages from persistent storage.
BambooPipe’s core is a light weight Java RMI server. The server normally runs as a Java RMI server on a HTTP server where applets are downloaded from. It's usable out of box, without any configuration. Configuration procedure is very easy in itself. Multiple queues can exist in a single server. When the server starts without configuration, it has one default queue.
Inside server, a log manager keeps persistent data in a log file. Unlike
most relational database and object databases, BambooPipe has object-based
instead of page-based storage management. Because persistent storage is
essentially append only, object-based storage outperforms page-based storage
considerably.
BambooPipe feature summary: