Application-level replication, the synchronization of data updates within
a cluster of application servers, may be provided by having application
servers themselves synchronize all updates to multiple redundant
databases, precluding the need for database-level replication. This may
be accomplished by first sending a set of database modifications
requested by the transaction to a first database. Then a message may be
placed in one or more message queues, the message indicating the objects
inserted, updated, or deleted in the transaction. Then a commit command
may be sent to the first database. The set of database modifications and
a commit command may then be sent to a second database. This allows for
transparent synchronization of the databases and quick recovery from a
database failure, while imposing little performance or network overhead.