Hibernate

Hibernateframework do realizacji warstwy dostępu do danych (ang. persistance layer). Zapewnia on przede wszystkim translację danych pomiędzy relacyjną bazą danych, a światem obiektowym (ang. O/R mapping). Opiera się na wykorzystaniu opisu struktury danych za pomocą języka XML, dzięki czemu można “rzutować” obiekty, stosowane w obiektowych językach programowania, takich jak Java bezpośrednio na istniejące tabele bazy danych. Dodatkowo Hibernate zwiększa wydajność operacji na bazie danych dzięki buforowaniu i minimalizacji liczby przesyłanych zapytań. Jest to projekt rozwijany jako open source. Głównym inicjatorem i liderem projektu jest Gavin King.

Podprojekty

W skład projektu Hibernate wchodzą następujące podprojekty:

  • Hibernate Core
  • Hibernate Annotations
  • Hibernate EntityManager
  • Hibernate Shards
  • Hibernate Validator
  • Hibernate Search
  • Hibernate Tools
  • NHibernate

Hibernate Core

Stanowi centralną część wszystkich projektów. Pozostałe stanowią albo rozszerzenia (np. Hibernate Annotations) albo translację dla innych języków (NHibernate). Stąd podprojekt Hibernate Core jest utożsamiany z całym projektem Hibernate.

Hibernate Core jest biblioteką umożliwiającą wykonywanie mapowania obiektowo-relacyjnego dla języka Java, w którym mapowania zdefiniowane są w dokumentach XML.

Hibernate Annotations

Rozszerzenie projektu Hibernate Core pozwalające na stosowanie adnotacji (zamiast dokumentów XML) do definiowania mapowań między obiektami Javy oraz tabelami.

Hibernate EntityManager

Nakładka na projekt Hibernate Core wprowadzająca EntityManager jako centralną klasę, z poziomu której wykonywana jest komunikacja z bazą danych. Połączenie podprojektów Hibernate EntityManager oraz Hibernate Annotations pozwala posługiwać się techniką mapowania obiektowo-relacyjnego zgodnie ze standardem Java Persistence API.

Hibernate Shards

Ułatwia stosowanie Hibernate Core w przypadku stosowania wielu baz danych.

Hibernate Validator

Rozszerza zestaw adnotacji wprowadzonych przez Hibernate Annotations o takie, które umożliwiają dodanie ograniczeń na wartości pól podlegających mapowaniu. Ograniczenia te są podobne jak ograniczenia na pola w bazie danych (ang. constraints). Ograniczenia te są definiowane na poziomie obiektów podlegających zapisywaniu do bazy danych, jednakże dotyczą zarówno ograniczeń nakładanych na pola w bazie danych przy generowaniu schematu bazy danych jak i ograniczeń wprowadzanych na poziomie języka programowania.

Hibernate Search

Rozszerza możliwości Hibernate Core o usługę pełnotekstowego wyszukiwania (ang. full text search) implementowanego w oparciu o bibliotekę Lucene. Podprojekt ten wykorzystuje również mechanizm adnotacji.

Hibernate Tools

Obejmuje zestaw narzędzi ułatwiających wykorzystanie Hibernate Core w tworzeniu projektów w języku Java. W szczególności zawiera

  • zadania dla narzędzia Ant umożliwiające generowanie schematu bazy danych na podstawie mapowań czy też generowanie klas Java na podstawie mapowań,
  • wtyczkę dla Eclipse IDE ułatwiającą pracę z Hibernate.

NHibernate

NHibernate jest implementacją usługi mapowania obiektowo-relacyjnego dla platformy .NET.

Pozycja na rynku

Hibernate jest frameworkiem posiadającym najbogatsze API spośród dostępnych rozwiązań. Alternatywą dla tego frameworka stanowi iBATIS oferujący lepsze wsparcie dla obsługi procedur składowanych.

O roli jaką pełni Hibernate świadczy fakt, iż jest on wykorzystywany przez serwer aplikacyjny JBoss. Główny autor Hibernate brał udział w pracach nad opracowaniem standardowego API dla mapowania obiektowo-relacyjnego w języku Java – JPA. Specyficzny dla Hibernate interfejs programistyczny oferuje dużo bogatszy zakres opcji i metod niż standard JPA.

Innym znanym konkurentem Hibernate jest TopLink, narzędzie opracowane przez firmę Oracle udostępniające własne rozszerzenia w stosunku do standardu JPA. Zaletą TopLinka jest jego bardzo dobra integracja z innymi produktami firmy Oracle, takimi jak baza danych Oracle.

Java Persistence API

Java Persistence API (skrót JPA) jest oficjalnym standardem mapowania obiektowo-relacyjnego (ORM) firmy Sun Microsystems dla języka programowania Java.

 

Powstanie standardu

Standard JPA jest elementem standardu EJB 3.0 zdefiniowanym w JSR 220. Enterprise JavaBeans 3.0 został utworzony by zastąpić wersję poprzednią EJB 2.1, w której był inny model persystencji – CMP. Końcowa wersja standardu EJB 3.0 została wydana w maju 2006 roku.

W skład grupy ekspertów zajmujących się tworzeniem JPA wszedł twórca Hibernate: Gavin King. Oficjalny FAQ na stronach Sun podaje, iż na postać standardu miał wpływ nie tylko Hibernate, ale także JDO i TopLink.

Trwają prace nad kolejną wersją standardu 2.0 w ramach JSR 317.

Opis technologii

JavaPersistence API jest standardem ORM dla języka Java. Z punktu widzenia programisty jest to możliwość operowania na obiektach – zwanych encjami – oraz zapisywania wyników operacji do relacyjnej bazy danych za pomocą obiektu EntityManager. Sposób w jaki obiekty i ich połączenia przekładają się na elementy bazy danych są definiowane za pomocą adnotacji lub/i dokumentów XML. Poza standardowym zestawem operacji udostępnianych przez obiekt EntityManager standard JPA definiuje język zapytań JPA Query Language podobny do SQL.

Implementacje w serwerach aplikacyjnych

Poza wzorcową implementacją standardu JPA – czyli serwera aplikacyjnego GlassFish, istnieje wiele innych implementacji wspomnianego standardu. Serwery aplikacyjne dostarczające usług ORM zgodnie ze standardem Java Persistence API:

Serwery aplikacyjne i ich implementacje JPA
Silnik implementujący JPA Serwer aplikacyjny Producent serwera
Hibernate EntityManager JBoss AS Red Hat
TopLink Oracle Application Server/OC4J Oracle Corporation
Kodo WebLogic Server BEA
Open JPA Apache Geronimo, Open EJB Apache Software Foundation

Warto podkreślić, iż niektóre serwery aplikacyjne udostępniają możliwość zamiany dostawcy usług ORM zgodnie ze standardem JPA.

Zależności między JPA, EJB 3.0 oraz Java EE 5

JPA jest elementem standardu EJB 3.0 a ten z kolei wchodzi w skład Java EE 5. Usługi standardu EJB są zwykle realizowane przez specjalne środowisko uruchomieniowe zwane serwerem aplikacyjnym. Istnieje jednak możliwość korzystania z tego standardu w aplikacjach nie korzystających z serwera aplikacyjnego. Zapewnia ją, między innymi, implementacja JPA dostarczana w ramach projektu Hibernate.

JAVA – Hello world!

/*************************************************************************
*  Compilation:  javac HelloWorld.java
*  Execution:    java HelloWorld
*
*  Prints “Hello, World”. By tradition, this is everyone’s first program.
*
*  % java HelloWorld
*  Hello, World
*
*  These 17 lines of text are comments. They are not part of the program;
*  they serve to remind us about its properties. The first two lines tell
*  us what to type to compile and test the program. The next line describes
*  the purpose of the program. The next few lines give a sample execution
*  of the program and the resulting output. We will always include such
*  lines in our programs and encourage you to do the same.
*
*************************************************************************/

public class HelloWorld {

public static void main(String[] args) {
System.out.println(“Hello, World”);
}

}

Jave EE information

Java Platform, Enterprise Edition (Java EE) 6 is the industry standard for enterprise Java computing. Utilize the new, lightweight Java EE 6 Web Profile to create next-generation web applications, and the full power of the Java EE 6 platform for enterprise applications. Developers will benefit from productivity improvements with more annotations, more POJOs, simplified packaging, and less XML configuration.

 

Find more info at: Java EE at a Glance