Hibernate 5 Bootstrapping API

1. Áttekintés

Ebben az oktatóanyagban megvizsgáljuk az új mechanizmust, amellyel inicializálhatjuk és elindíthatjuk a hibernált állapotot SessionFactory. Különösen az új natív bootstrapping folyamatra fogunk összpontosítani, amelyet az 5.0 verzióban újraterveztek.

Az 5.0 verzió előtt az alkalmazásoknak a Konfiguráció osztály bootstrap a SessionFactory. Ez a megközelítés már elavult, mivel a Hibernate dokumentáció az új API használatát javasolja az ServiceRegistry.

Egyszerűen fogalmazva, épület a SessionFactory arról szól, hogy van egy ServiceRegistry megvalósítás, amely a Szolgáltatások szükséges Hibernate-nek az indítás és a futás során egyaránt.

2. Maven-függőségek

Mielőtt elkezdenénk felfedezni az új rendszerindítási folyamatot, hozzá kell adnunk a hibernált mag jar fájlt a projekt osztályútjához. Egy Maven-alapú projektben csak ki kell jelentenünk ezt a függőséget a pom.xml fájl:

 org.hibernate hibernate-core 5.4.0.Végső 

Mivel a Hibernate JPA szolgáltató, ez átmenetileg magában foglalja a JPA API függőséget is.

Szükségünk van annak az adatbázisnak a JDBC illesztőprogramjára is, amellyel dolgozunk. Ebben a példában egy beágyazott H2 adatbázist fogunk használni:

 com.h2adatbázis h2 1.4.197 

Ellenőrizze nyugodtan a hibernált mag és H2 vezető a Maven Central-on.

3. Bootstrapping API

A rendszerindítás az a felépítésének és inicializálásának folyamatára utal SessionFactory.

E cél eléréséhez rendelkeznünk kell a ServiceRegistry hogy tartja a Szolgáltatások szükséges Hibernate-nek. Ebből a nyilvántartásból felépíthetünk egy Metaadatok objektum, amely az alkalmazás tartománymodelljét és az adatbázishoz való hozzárendelését ábrázolja.

Fedezzük fel ezeket a főbb tárgyakat részletesebben.

3.1. Szolgáltatás

Mielőtt belemélyednénk a ServiceRegistry koncepció, először meg kell értenünk, hogy mi a Szolgáltatás van. A Hibernate 5.0-ban a Szolgáltatás egy olyan típusú funkció, amelyet az azonos nevű interfész képvisel:

org.hibernate.service.Service

Alapértelmezés szerint a Hibernate biztosítja a leggyakoribb megvalósításokat Szolgáltatások, és a legtöbb esetben elegendőek. Ellenkező esetben felépíthetjük a magunkét Szolgáltatások vagy módosíthatja az eredeti hibernált funkciókat, vagy újakat adhat hozzá.

A következő alfejezetben megmutatjuk, hogyan készíti ezeket a Hibernate Szolgáltatások nevű könnyű konténeren keresztül elérhető ServiceRegistry.

3.2. ServiceRegistry

Az első lépés az a SessionFactory létrehozni a ServiceRegistry. Ez lehetővé teszi a különféle tartást Szolgáltatások amelyek a hibernáláshoz szükséges funkciókat biztosítják, és a Java SPI funkciókon alapulnak.

Technikailag nézve láthatjuk a ServiceRegistry könnyű Dependency Injection eszközként, ahol a bab csak típusú Szolgáltatás.

Kétféle lehet ServiceRegistry és hierarchikusak.Az első a BootstrapServiceRegistry, amelynek nincs szülője, és rendelkezik ezzel a három szükséges szolgáltatással:

  • ClassLoaderService: lehetővé teszi a Hibernate számára, hogy kölcsönhatásba lépjen a ClassLoader a különböző futásidejű környezetekből
  • IntegratorService: ellenőrzi a .felfedezést és kezelését Integrátor szolgáltatás, amely harmadik féltől származó alkalmazásokat integrál a Hibernate rendszerbe
  • StrategySelector: megoldja a különféle stratégiai szerződések megvalósítását

A BootstrapServiceRegistry megvalósítását, a BootstrapServiceRegistryBuilder gyári osztály, amely lehetővé teszi e három szolgáltatás típusbiztonságos testreszabását:

BootstrapServiceRegistry bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder () .applyClassLoader () .applyIntegrator () .applyStrategySelector () .build ();

A második ServiceRegistry az a StandardServiceRegistry, amely az előzőre épít BootstrapServiceRegistry és tartja a hármat Szolgáltatások fent emlitett. Ezenkívül különféle egyéb anyagokat is tartalmaz Szolgáltatások szükséges a Hibernate számára, StandardServiceInitiators osztály.

Az előző regisztrációhoz hasonlóan mi is a StandardServiceRegistryBuilder hogy létrehozzunk egy példányt a StandardServiceRegistry:

StandardServiceRegistryBuilder standardServiceRegistry = új StandardServiceRegistryBuilder ();

A motorháztető alatt a StandardServiceRegistryBuilder létrehozza és használja a BootstrapServiceRegistry. Túlterhelt konstruktort is használhatunk egy már létrehozott példány átadásához:

BootstrapServiceRegistry bootstrapServiceRegistry = new BootstrapServiceRegistryBuilder (). Build (); StandardServiceRegistryBuilder standardServiceRegistryBuilder = új StandardServiceRegistryBuilder (bootstrapServiceRegistry);

Ezt az építőt használjuk egy konfiguráció betöltésére egy erőforrás fájlból, például az alapértelmezettről hibernate.cfg.xml, és végül meghívjuk a épít() metódus a StandardServiceRegistry.

StandardServiceRegistry standardServiceRegistry = standardServiceRegistryBuilder .configure () .build ();

3.3. Metaadatok

Miután konfigurálta az összes Szolgáltatások szükséges a példányosítással a ServiceRegistry bármelyik típus BootstrapServiceRegistry vagy StandardServiceRegistry, most meg kell adnunk az alkalmazás tartománymodelljének és adatbázis-leképezésének reprezentációját.

A MetadataSources osztály felelős ezért:

MetadataSources metadataSources = új MetadataSources (standardServiceRegistry); metadataSources.addAnnotatedClass (); metadataSources.addResource ()

Ezután kapunk egy példányt Metaadatok, amelyet az utolsó lépésben használunk:

Metadata metadata = metadataSources.buildMetadata ();

3.4. SessionFactory

Az utolsó lépés a SessionFactory a korábban létrehozott Metaadatok:

SessionFactory sessionFactory = metadata.buildSessionFactory ();

Most megnyithatjuk a Ülés és kezdje a kitartó és olvasó entitásokat:

Munkamenet = sessionFactory.openSession (); Filmfilm = új film (100L); munkamenet.ellenőr (film); session.createQuery ("FROM Movie"). list ();

4. Következtetés

Ebben a cikkben feltártuk a SessionFactory. Bár a folyamat összetettnek tűnik, három nagy lépésben foglalhatjuk össze: először hoztunk létre egy példányát StandardServiceRegistry, akkor megépítettük a Metaadatok objektumot, végül megépítettük a SessionFactory.

E példák teljes kódja megtalálható a Github oldalon.