Piotr Sobczyk

Piotr Sobczyk Student,
Politechnika
Wrocławska

Temat: Frameworki ORM dla Javy - popularność, standard JPA 2.0 i...

Witam wszystkich!

Jestem w trakcie pisania pracy magisterskiej na temat zagadnienia mapowania obiektowo-relacyjnego (ORM). Jednym z zadań, które mam wykonać w ramach pracy jest wykonanie porównania frameworków ORM (z zawężeniem do języków opartych na JVM). Ciągle nie mogę się zdecydować na ostateczny wybór frameworków, które będę porównywał.

Chyba dwa najważniejsze kryteria wyboru, jakie sobie przyjąłem to:
1. popularność - jest mnóstwo mniej znanych, często nawet całkiem interesujących rozwiązań, ale niewielki będzie pożytek z ich porównywania, jeśli w komercyjnych rozwiązaniach są one stosowane w śladowych ilościach
2. różnorodność - chciałbym, żeby wybrane rozwiązania w znaczący sposób się od siebie różniły, żeby było co porównywać. Chciałbym się przede wszystkim skoncentrować na porównaniu zakresu funkcjonalności, stopnia złożoności itd, a na ew. testy wydajnościowe poświęcić mniej uwagi, bo jestem do nich sceptycznie nastawiony.

Moimi obecnymi kandydatami są: JPA 2.0/Hibernate Entity Manager, MyBatis (dawniej iBatis) oraz GORM (rozwiązanie ORM wbudowane w framework Grails dla Groovy'ego)

Problem w tym, że pomimo faktu, że sporo już pogooglowałem, to bardzo trudno mi było wyłonić te najpopularniejsze, najlepiej przyjęte rozwiązania. Co do JPA i MyBatis to nie mam wątpliwości, że zdobyły sporą popularność. Czy o GORM'ie można powidzieć podobnie? Z tego co wiem, to Grailsy przyjęły się całkiem nieźle (ale czy wszyscy korzystający z Grailsów korzystają z wbudowanego ORMa czy są ludzie, którzy preferują korzystać z zewnętrznych ORMów?). Czy pominąłem jeszcze coś ważnego, czym warto by się zainteresować i uwzględnić w porównaniu?

Moim początkowym planem było porównanie: Hibernate, EclipseLink, JDO, ponieważ wydawały się najpopularniejsze, ale obecnie wszystkie "podciągnięte" są pod JPA i dlatego oferują bardzo zbliżony zakres funkcjonalności. O ile jeszcze za czasów specyfikacji JPA 1.0 można było robić porównania Hibernate/EclipseLink/JDO w wersji native vs w roli providera JPA, to specyfikacja JPA 2.0 wydaje się na tyle dojrzała i rozbudowana, że zapewnia wszystkie potrzebne usługi (np. język zapytań cryteria, który wcześniej był przewagą korzystania z Hiberante'a w wersji Native zamiast w roli providera JPA). Więc wychodzi na to, że w każdym przypadku lepiej korzystać z framerworku w roli providera JPA 2.0, bo jest dużo zalet, a w zasadzie nie ma wad.

A może się mylę, może wciąż są jakieś istotne feature'y w native Hibernate (hibernate core) czy native EclipseLink, których brakuje w specyfikacji JPA 2.0? Doświadczył ktoś tego?

A więc podsumowując moje pytania: czy oprócz JPA 2.0, MyBatis i GORMa jest jeszcze coś naprawdę godnego uwagi i raczej popularnego? Czy są jeszcze jakieś istotne różnice pomiędzy frameworkami implementującymi JPA 2.0 w wersji native a w wersji providera JPA 2.0? Czy jest jakikolwiek sens zestawiać ze sobą np. Hibernate'a i EclipseLink pod jakimkolwiek względem innym niż wydajność (czy różnią się pomiędzy sobą jeszcze czymś istotnym)?

Każda odpowiedź czy to oparta na osobistym doświadczeniu czy na przeczytaniu kiedyś czegoś byłaby mi bardzo pomocna. Z góry dzięki.
Tomasz D

Tomasz D Programista
Java/JEE, freelancer

Temat: Frameworki ORM dla Javy - popularność, standard JPA 2.0 i...

Naprawdę popularnych innych ORM'ów w świecie Javy nie znam, ale czasami czytam o ludziach, którzy używają Apache Cayenne (http://cayenne.apache.org/), więc to może być jakiś trop.
Piotr Sobczyk

Piotr Sobczyk Student,
Politechnika
Wrocławska

Temat: Frameworki ORM dla Javy - popularność, standard JPA 2.0 i...

Dzięki, Tomek! Również natrafiłem na trochę opinii polecających Cayenne ale z jakiegoś powodu nie poświęciłem mu uwagi. Już sam patronat fundacji Apache sprawia, że prawdopodobnie powinienem się zainteresować Cayenne. Na pewno sprawdzę ten trop :).
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: Frameworki ORM dla Javy - popularność, standard JPA 2.0 i...

Z racji Google App Engine nie pomijałbym JDO i przyjrzałbym się na twoim miejscu DataNucleus. Porównanie może być ciekawe...
Jacek Wojciechowski

Jacek Wojciechowski Software development
manager

Temat: Frameworki ORM dla Javy - popularność, standard JPA 2.0 i...

Moje sugestie sa takie:

1. Interesujace to byloby porownanie ORMa w stylu Hibernate/JPA z rozwiazaniem typu Active Record (np. Ruby on Rails) - jesli zalezy ci na roznorodnosci to sa to wlasnie zupelnie rozne rozwiazania. Ponadto, co najmniej kilka plaszczyzn w jakich to mozna porowynywac (np. produktywnosc dewelopera, wydajnosc, zlozonosc, wplyw na inne warstwy systemu). Gdybym teraz pisal mgr to wlasnie o tym bym pisal.

2. Zastanow sie co tak naprawde daja ORMy i kiedy warto recznie napisac SQL i recznie zrobic translacje jednego modelu na drugi. Wlasciwie to jakie opcje ma architekt projektujac obiektowy system z relacyjna baza danych? A moze w ogole z baza, niekoniecznie relacyjna, niekoniecznie OLTP czy bez C z CAP (CAP Theorem)?

3. Nie skupiaj sie na drugorzednych i trzeciorzednych cechach typu jest criteria query, ani na drobiazgowym porownywaniu takich rzeczy.

4. Popularnosc danego ORMa niekoniecznie swiadczy o tym, ze jest dobry. Popularnosc to zjawisko socjologiczne. Rowniez w informatyce. Gdzies przeczytalem ze "... the pattern of adoption in IT world is: 'ooohhh, shiny!'". Inna sprawa ze tzw. "industry standards" (np. JPA czy JSF) maja b. duzy wplyw - i to niekoniecznie wynikajacy z obiektywnej wartosci tych rozwiazan.

5. I nie zapomnij napisac o tym dlaczego musimy sie meczyc z ORM-ami (przyczyny porazki baz obiektowych, fikcja ORDBMS) i na czym te meczarnie polegaja (object-relational impedance mismatch etc.)

Następna dyskusja:

LINQ dla Javy - SBQL4J




Wyślij zaproszenie do