EJB 3.0 introduced an interceptor facility for session beans and message-driven beans, allowing cross-cutting concerns to be applied declaratively. It also enhanced the Java Persistence API to support standard SQL queries through JPQL and native SQL. EJB 3.0 did NOT eliminate lifecycle callback methods (they became optional annotations), and it actually reduced the requirement for checked exceptions, not increased it.