Prior Java EE 5 (2006, see the whole history in: http://realworldpatterns.com) your application code had to realize J2EE interfaces and was forced to implement several infrastructural methods. The amount of plumbing was significant and the business logic was hard to understand.
With the introduction of annotations in JDK 1.5 and the introduction of Dependency Injection paired with Convention over Configuration in Java EE 5 your application code is only dependent on annotations which are comparable to the Marker Interface pattern. Java EE 6 went even further, so you can implement large portions of business logic without being even dependent on any Java EE annotations.
Also the main goal of the outdated http://www.corej2eepatterns.com was the separation of "clean" business logic and the "polluted" J2EE infrastructure. Now the majority of the J2EE patterns solves no more existing problems, mostly problems being already solved in the recent Java EE releases.
With Java EE 5+ any attempt to separate your business logic from Java EE infrastructure will result in empty delegates, parallel and identical object hierarchies, increased complexity and harder maintainability.
Stop plumbing, focus on business logic and added value to your customers :-)
NEW: Effective Java EE 7 -- Available For Streaming