I am very confused with different java frameworks. I want to create a java server project to offer some Restful web-service, but I really dont know which framework I should choose. What is the difference between JSF, EJB, Hibernate and Spring? Please help me understand them more.
EJB is a specification of Java EE. Spring is a framework. It can inject anything in the container including EJB Data sources, JMS Resources, and JPA Resources. It can inject anything including list, properties, map, and JNDI resources.
EJB is an Enterprise Java Bean -- see link for description, but basically its the 'default' java way of writing an enterprise application. Hibernate is an ORM Framework; a way to map the Objects/Classes in your application to database tables. It is related to how you persist your data to a database.
EJB is still there and growing up. There are many new features (SOAP/RESTful webservice, JPA entities, JAXB...)
The Spring Framework is an application framework and IoC container for the Java platform. The framework was initially created as an alternative to EJB. Spring offers modular approach to adding new functionalities, which means that developers can use only parts they're interested in.
These are frameworks for different layers.
JSF is for the view (web) layer, it's a component oriented framework (every part of a page is a component, it has state) like Wicket or Tapestry, and unlike Action frameworks like Spring MVC, Struts or Stripes
Books: Core JavaServer Faces (3rd Edition)
Tutorials: CoreServlets.com
EJB 3.x is a container that's part of the JavaEE stack. It does things like dependency injection and bean lifecycle management. You usually need a full JavaEE application server for EJB3
Tutorials: JavaEE 6 Tutorial: EJB
Books: EJB 3 in Action
Spring is also a container, but Spring can run in any java code (a simple main class, an applet, a web app or a JavaEE enterprise app). Spring can do almost everything EJB can do and a lot more, but I'd say it's most famous for dependency injection and non-intrusive transaction management
Online Reference (excellent)
Books: I couldn't find a good english book on Spring 3.x, although several are in the making
Hibernate was the first big ORM (Object relational mapper) on the Java Platform, and as such has greatly inspired JPA (which is part of the EJB3 standard but can be used without an EJB container). I would suggest coding against JPA and only using hibernate as a provider, that way you can easily switch to EclipseLink etc.
Books: Pro JPA 2: Mastering the Java™ Persistence API (not hibernate-specific),
Java Persistence with Hibernate (getting a bit old)
However, if you want to do REST, then the most important standard for you is JAX-RS. You can use it either within the Spring framework or with EJBs. For persistence, you could use Hibernate, or the JPA implementation of an EJB container such as Glassfish
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With