This chapter explains how to reliably send and receive JMS messages with local JMS transactions and explicit or implicit acknowledge modes. While explaining the main messaging concepts in the preceding chapter, we skipped one of the most important aspects of messaging communication: reliability. The Java Message Service communicates in most cases via a network. And networks commonly fail. Therefore, if we rely on messaging communication, we need to make sure that this communication is fault-tolerant.