Ne znam kako si rešio perzistenciju u aplikaciji, to može da utiče na izbor najboljeg rešenja u ovom slučaju.
Da li koristiš EJB, Hibernate, JDBC ili nešto drugo?
Najprostija varijanta, u slučaju da koristiš JDBC, je da napraviš
singleton klasu koja bi se zvala nrp. UsaStatesCache i koja bi na prvi zahtev obavila učitavanje iz baze, a kasnije bi vraćala već učitane vrednosti. Bitno je da upotrebiš neku Thread safe implementaciju singletona i obaviš lazy-load podataka.
Ako koristiš EJB onda možeš u kontejneru da podesiš keširanje odgovarajućih entity bean-ova.
Hibernate ima dva nivoa keša ali ne bih znao da ti preporučim najbolje rešenje, javiće se neko ko zna dobro Hibernate pa će reći šta treba činiti.
Pozdrav!