Adopting a Java Persistence Framework: Which, When, and What?