In this paper we present a framework for estimating the energy consumption of Java-based software systems. Our primary objective is to enable an engineer to make informed decisions when adapting a system’s architecture, such that the energy consumption on hardware devices with a finite battery life is reduced and the lifetime of the system’s key software services extended. Our framework explicitly takes a component-based perspective. It allows the engineer to estimate a system’s energy consumption prior to deployment and refine it at runtime. In a large number of distributed application scenarios, the framework has given results that are within 5% of the actually measured power losses incurred by executing the software. Our work to date has also highlighted a number of future enhancements.