Chapter 5. Java Persistence and Relational Data
Energy and persistence conquer all things.
— Benjamin Franklin
If we really boil down the primary objective of most applications to bare metal, we’ll find that nearly everything we do involves an interaction with data. We supply it when we make a new online order. We pull it out when we research on a wiki. We update it when we change our credit card’s billing address.
The information contained in a system at any point in time comprises the state of the application, and state comes in a variety of scopes, including:
- Limited access within one request/response cycle
- Limited access within one user session
- Limited access to a sequence of events (treated as one unit) within one user session
- Shared throughout the application
- Shared throughout the host environment
Depending upon your view or framework of choice, there may be other ways to slice visibility, but this list outlines some of the most commonly used paradigms.
As is thematic throughout the study of computer science, the rule of thumb is to limit ourselves to the smallest scope required. Fine-grained access to data helps to ensure that we don’t leak out state where it can cause security issues or difficult-to-debug behaviors. Can you imagine what it’d be like if one user’s access to his online bank account were to be replicated to all active sessions?
In addition to the notion of scopes, which limit data’s ...