  Service-orientation views applications as orchestrations of independent
software services that (1) implement functions that are reusable across many
applications, (2) can be invoked remotely, and (3) are packaged to decouple
potential callers from their implementation technology. As such, it enables
organizations to develop quality applications faster than without services.
Legacy applications are not service-oriented. Yet, they implement many reusable
functions that could be exposed as \emph{services}. Organizations face three
main issues when re-engineering legacy application to (re)use services: (1) to
mine their existing applications for reusable functions that can become
services, (2) to package those functions into services, and (3) to refactor
legacy applications to invoke those services to ease future maintenance. In
this paper, we explore these three issues and propose research directions to
address them. We choose to focus on the service-oriented re-engineering of
recent legacy object-oriented applications, and more specifically, on JEE
applications, for several reasons. First, we wanted to focus on architectural
challenges, and thus we choose to \textit{not} have to deal with programming
language difference between source and target system. We chose JEE
applications, in particular, because they embody the range of complexities that
one can encounter in recent legacy applications, namely, multi-language
systems, multi-tier applications, the reliance on external configuration files,
and the reliance on frameworks and container services during runtime. These
characteristics pose unique challenges for the three issues mentioned above.
