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.