At the moment I'm looking at the Spring framework. A couple of books are written about writing Java software using Spring, and at lately I've been reading "Better, Faster, Lighter Java" by Justin Gehtland and Bruce Tate.
The book is interesting. The authors give a refreshing perspective on software development using Java. They describe how many software projects use over-advanced frameworks and tools such as EJBs, even for simple applications. They give suggestions on alternatives, and re-state the advices that have been been formulated since the beginning of computer science, of which rule number one has always been: "Keep it simple."
A nice quote from the book: "Java development without a little heresy would be a dull place, and a dangerous one. You've got to challenge conventional thinking. When you don't, bloat happens."
The Spring framework itself looks promising. Not revolutionary, but useful. I am starting up a new project at my work this week; it's a management tool for an existing application. Unfortunately, it looks like it's going to be difficult to introduce Hibernate or another decent database abstraction layer, as a lot of JDBC/stored procedure code has already been written. To enable a smoother transition later to Hibernate, it's probably wise to define a strict separation between the existing database access code and the new components that my team will make. I'm trying to find out if Spring is able to help out in that aspect.