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.