This document describes an integrated learning environment called the Java Programming Laboratory (JPL) used to teach introductory Java programming. JPL incorporates problem-based learning, scaffolded exercises, and real-time tracking of student progress. It provides immediate feedback and assistance to help students learn programming concepts and problem-solving skills. Analysis of student data in JPL allows instructors to monitor performance and tune the course as needed to better support student learning and engagement. Evaluation of JPL across 150 first-year students found that it improved pass rates and reduced failure and dropout rates compared to traditional teaching methods.