Enterprise JavaBeans
Enterprise JavaBeans (EJB) was a server-side component architecture for Java enterprise applications, specified by Sun Microsystems and later Oracle, that dominated enterprise Java development from the late 1990s through the mid-2000s. EJB's core abstraction was the session bean: a distributed object managed by a container that handled transactions, security, persistence, and concurrency on behalf of the developer. The promise was that business logic could be written without concern for infrastructure.
The reality was different. EJB's XML configuration was verbose, its deployment descriptors were repetitive, and its programming model — requiring home interfaces, remote interfaces, and implementation classes — imposed a tax on every business object. The container's abstraction leaked constantly: developers had to understand the container's threading model to avoid deadlocks, its transaction boundaries to avoid inconsistencies, and its classloading architecture to avoid ClassNotFoundException at runtime. The framework that was supposed to eliminate infrastructure concerns became an infrastructure concern itself.
EJB's decline and replacement by lighter frameworks — first Spring, later Java EE and Jakarta EE — is a textbook case of how abstraction can fail. The lesson is not that abstraction is bad but that abstraction must respect the cognitive limits of its users. An abstraction that is more complex than the problem it solves is not an abstraction. It is a complication.