I was planning to write on System Deisgn worries, but my boss urgently requested me to write something abt EJB and Hibernate , their differences based on my experience and doing some googling. This was urgently required for some proposal.
I finished this 2 pager and thought that I will share it with you all. It might be of some help.
Hibernate 3.0 & EJB 2.1 (CMP)
Hibernate is a powerful, ultra-high performance Object/Relational (OR) persistence and query service for Java.
- integrates elegantly with all popular J2EE Application servers and Web containers with out any restrictions.
- can also be used in stand alone Java applications.
- supports and implements the EJB 3.0 (JSR 220) persistence standardization.
This comparison between Hibernate and EJB 2.1 is strictly with CMP Entity beans and not with EJB Platform per-say. EJB Platform (Session Beans/ MDBs) offer many advantages such as componentization, remote access to applications, variety of clients support (java/CORBA etc) and asynchronous message model.
The EJB persistence mechanism (CMP Entity beans) has many issues/disadvantages
- they are heavy weight components
- high runtime overhead
- have a poor track record on the performance
- cumbersome to develop, lot of interface definitions limiting developer productivity
- Bean partitioning (Each bean a row in some table/Not every row of every table a Bean)
- Vendor dependent CMP optimizations can help performance, at cost of portability
- Inheritance not supported
- Cannot be used for persistence in non-application server environments.
- There is no dynamic query mechanism to lookup entity beans (finders are specified at compile time).
- It is not easy to write unit tests for beans as it is not possible to use them outside of the application server.
- No support for automatic primary key generation.Only relational databases are supported
Hibernate is open source product (similar to Struts and Log4j) and not vulnerable to any vendor lock-in and is supported by JBoss Inc.
- Hibernate works on POJO principles and it is light weight
- Hibernate is much more easier to use than handwritten SQL/JDBC (i.e. BMP Beans) and much, much easier to use and much powerful than Entity Beans 2.1
- Hibernate always executes SQL statements using a JDBC PreparedStatement, which allows the database to cache the query plan.
- Hibernate is able to implement certain optimizations (caching, outer join association fetching, JDBC batching, etc.) much more efficiently than typical handwritten JDBC.
- You may use Hibernate from servlets or Struts actions, or from behind an EJB session bean facade. In a CMT environment, Hibernate integrates with the JTA Datasource and TransactionManager, as well as JNDI.
- Hibernate has a very sophisticated second-level cache architecture and supports pluggable cache implementations.
- Hibernate supports composite keys
- Hibernate supports instance variables persistence i.e. Java Beans Style properties like getter/setters