Spring Framework Java Persistence API (JPA) арқылы интеграцияны қолдайды және нативті Hibernate үшін ресурстарды басқару, деректерге қол жеткізу объектілерін (DAO) және транзакциялар стратегияларын жүзеге асыруды қолдайды. Мысалы, Hibernate үшін бірнеше IoC-функцияларымен бірге бірінші сыныпты қолдаулар бар, олар Hibernate интеграциясының көптеген типтік мәселелерін шешеді. OR (объектілік-реляциялық) маппинг құралдары үшін барлық қолдау көрсетілетін функцияларды тәуелділіктерді енгізу арқылы теңшеуге болады. Олар Spring ресурстар мен транзакциялар менеджментіне қатыса алады және Spring-тегі типтелген транзакциялар мен DAO қателіктер иерархияларына сәйкес келеді. Ұсынылатын интеграция стилі – DAO кодтау, қарапайым Hibernate немесе JPA API-интерфейстерінің орнына.
Spring сіздің бағдарламаларыңыздағы деректерге кіру деңгейінде таңдалған ORM-ді кеңейту мүмкіндіктерін дамыту мүмкіндіктерін ұсынады. Интеграция қолдауын қанша алғыңыз келсе, сонша қолданыңыз, содан кейін осы интеграциялық күштерді өзіңіздің инфрақұрылымды құрудың құны мен тәуекелімен салыстырып көріңіз. ORM қолдауының көп бөлігін жүрмелі JavaBeans жиынтығы ретінде пайдалануға болады. IoC-консейнеріндегі ORM Spring-те конфигурациялау мен орналастыруды жеңілдетеді. Бұл бөлімдегі көптеген мысалдар Spring-консейнерінде конфигурацияны көрсетеді.
Spring Framework-ті ORM DAO объектілерін жасау үшін пайдаланудың артықшылықтары:
-
Тестілеуді жеңілдету. Spring IoC тәсілі Hibernate-дағы
SessionFactory
экземплярларын, JDBC-тенDataSource
экземплярларын, транзакция менеджерлерін және қажет болған жағдайда карталанған объектілерді өзгертуді жеңілдетеді. Бұл әрбір код бөлігін, әсіресе тұрақты сақтаумен байланысты, жеке тестілеуді айтарлықтай жеңілдетеді. -
Деректерге қол жеткізу қателіктері. Spring сіздің ORM-құралыңыздан қателіктерді орап, оларды өздерінің (мүмкін тексерілген) қателіктерінен жалпы
DataAccessException
иерархиясына түрлендіре алады. Бұл функция көпшілікті тексерілмейтін қатені тиісті деңгейлерде ғана өңдеуге мүмкіндік береді, ренжітетін шаблонды ұстап алып, тастау және хабарлау үшін кеңейту. Бірақ сіз әлі де қажеттілігі туындағанда қателіктерді ұстап алып, өңдей аласыз. JDBC қателіктерінің, оның ішінде DB-ге тән диалекттердің сол бір иерархияға түрлендірілгенін еске сақтаңыз, бұл кейбір JDBC операцияларын келісілген бағдарламалау моделінде орындауға мүмкіндік береді. -
Ресурстарды жалпы басқару. Spring қолданба контексттері Hibernate-тің
SessionFactory
экземплярларымен, JPA-данEntityManagerFactory
даналарымен, JDBC-тенDataSource
даналарымен және басқа байланысты ресурстармен орынды және конфигурациялауды өңдей алады. Бұл мәндерді басқару мен өзгерту жеңілдетіледі. Spring тұрақты сақтау ресурстарымен тиімді, қарапайым және қауіпсіз жұмыс істеуді ұсынады. Мысалы, Hibernate-ді қолданатын тәуелді кодта тиімділікті және транзакциялардың дұрыс өңделуін қамтамасыз ету үшін солSession
қолдану керек. Spring оны ағымдағы ағынға қарапайым түрде жасауға мүмкіндік береді,SessionFactory
арқылы ағымдағыSession
оңай байланыстырады, осылайша, Spring әрбір жергілікті немесе транзакциялық JTA-ортасында кез келген типтік Hibernate қолданысының көптеген созылмалы мәселелерін шешеді. -
Транзакцияларды біріктірілген басқару. Сіздің ORM-кодыңызды декларативті әдіс-перехватчик арқылы не
@Transactional
аннотациясы арқылы, не транзакциялық AOP-кеңес XML конфигурациясында анықталған түрде тіркеп алуға болады. Екі жағдайда да транзакция семантикасы мен қателіктерді өңдеу (артқа оралу және т.б.) сіз үшін орындалады. "Ресурстар мен транзакцияларды басқару" атты бөлімде сипатталғандай, транзакция диспетчері арасында кодыңызды өзгертпестен ауысуға болады. Мысалы, жергілікті транзакциялардан JTA-ға ауысуға болады, екі сценарийде де сол толыққанды қызметтер (мысалы, декларативті транзакциялар) қолжетімді болады. Сонымен қатар, JDBC-мен байланысты код ORM үшін қолданылатын кодпен толықтай транзакциялық біріктіріле алады. Бұл деректерге қолжетімділікті ұйымдастыру үшін пайдалы, ол ORM-ге сәйкес келмейді (мысалы, партиялық өңдеу және BLOB ағынды өңдеу), бірақ ортақ транзакцияларды бөлісу қажет болған кезде ORM операцияларымен бірге.
ORM интеграциясының жалпы тәсілдері
Бұл бөлім барлық ORM технологияларына қатысты ұсыныстарды қарастырады. Hibernate-ге арналған бөлімінде нақты контексте осы мүмкіндіктер мен конфигурацияларды көрсететін, сондай-ақ, қосымша ақпарат бар.
Spring-де ORM интеграциялаудың негізгі мақсаты – бұл қолданбаларды айқын құрылымдау (қаңырап жатқан деректерге қол жеткізу және транзакциялары бар) және қолданба объектілерін бос байланыстырмау – деректерге қол жеткізу стратегиясынан немесе транзакциядан бизнес қызметтердің тәуелсіздігі, ресурстарды іздеудің қатты кодталған жетемеуі, пайдаланылмайтын жалғыздық объектілері жоқ, және ешбір созылмалы қызметтегі тізілімдер болмайды. Осы мақсат – қолданбаларды объектілерін анықтау мен байланыстырудың бір қарапайым және үйлесімді тәсілін ұйымдастыру, оларды максималды деңгейде қайта пайдалану мүмкіндігін және контейнерлерден тәуелділікті жоюды қамтамасыз ету. Барлық деректерге қол жеткізу мүмкіндіктерін бөлек қолдануға болады, бірақ олар Spring-дің қолданба контексті концепциясымен тамаша өзара әрекеттеседі, конфигурацияларды XML негізіндегі және жалпыға белгілі JavaBean экземплярларына айқас сілтемелерді қамтамасыз ете отырып, Spring-мен үйлесімді емес. Көптеген маңызды объектілер типтік Spring қолданбасында JavaBeans болып табылады: деректерге қол жеткізу шаблондары, деректерге қол жеткізу объектілері, транзакция диспетчерлері, деректерге қол жеткізу объектілерін және транзакция диспетчерлерін қолданатын бизнес қызметтері, веб-көрініс шешушілері, бизнес қызметтерін қолданатын веб-контроллерлер және сондықтан.
Ресурстар мен транзакцияларды басқару
Типтік бизнес-қолданбаларда ресурстарды басқару үшін қайталанатын кодтар жиынтығы бар. Көптеген жобалар өз шешімдерін ойлап табуға тырысады, кейде программалаудың ыңғайлылығына сай келмейтіндей мақсатты жоя отырып. Spring ресурстарды тиісті түрде өңдеуге арналған қарапайым шешімдерді ұсынады, яғни IoC арқылы JDBC жағдайында және ORM технологиялары үшін AOP-перехватчиктерді қолдану.
Инфрақұрылым ресурстарды тиісті түрде өңдеуді және API-интерфейстеріне тән қателіктерді тиісті түрде инфрақұрылымның тексерілмейтін қателігі иерархиясына түрлендіруді қамтамасыз етеді. Spring кез келген деректерге қол жеткізу стратегиясына қолданылатын DAO қателік иерархиясын енгізеді. Тікелей JDBC жағдайында, алдыңғы бөлімде аталған JdbcTemplate
класы қосылуларды өңдеуді және SQLException
-ні DataAccessException
иерархиясына, соның ішінде деректер базасына тән SQL қателер кодтарын мағыналы қателік кластарға түрлендіруді қамтамасыз етеді. ORM технологиялары үшін сол артықшылықтарды қателерді түрлендіру арқылы пайдалану үшін келесі бөлімді қараңыз.
Транзакцияларды басқаруға келсек, JdbcTemplate
класы Spring-дің транзакцияларды қолдау құралдарына қосылады және JTA және JDBC транзакцияларын Spring-дің сәйкес транзакция диспетчерлері арқылы қолдайды. Қолданатын ORM технологиялары үшін Spring Hibernate және JPA арқылы транзакция менеджерлерін, сондай-ақ JTA қолдауды ұсынады. Транзакция қолдауының толық сипаттамасы үшін "Транзакцияларды басқару" тарауын қараңыз.
Қателерді түрлендіру
Егер Hibernate немесе JPA DAO ретінде қолданылса, қолдау технологиясының деңгейіндегі нативті қателіктерді қалай өңдейтінімізді шешуіміз керек. DAO HibernateException
немесе PersistenceException
класының ішкі класы шығарады технологияға байланысты. Осы қателіктердің барлығы орындалу уақытындағы қателіктер және хабарланбайды немесе ұсталып алынбайды. Сондай-ақ, IllegalArgumentException
және IllegalStateException
қателерімен де кездесуі мүмкін. Бұл шақыру бағдарламалары тек тұрақты сақтау қолдау технологиясының өзінің қателік құрылымына тәуелді болмау үшін маңызды деп саналатын қателіктермен ғана жұмыс істей алады дегенді білдіреді. Нақты себептерді (мысалы, оптимистік құлыптау сәтсіздігі) білу, егер шақыру бағдарламасын жүзеге асыру стратегиясына байлағысы келмейтін болса, мүмкін емес. Мұндай компромисс ORM негізделген немесе ерекше қателіктерді өңдеуді қажет етпейтін (немесе екеуі де) қолданбалар үшін қолайлы болуы мүмкін. Бірақ Spring @Repository аннотациясы арқылы қателерді түрлендіруді қарапайым қолданып көруге мүмкіндік береді. Келесі мысалдарда (біреуі Java конфигурациясы үшін, екіншісі XML конфигурациясы үшін) осылай жасау көрсетілген:
@Repository
public class ProductDaoImpl implements ProductDao {
// класс денесі мұнда...
}
@Repository
class ProductDaoImpl : ProductDao {
// класс денесі мұнда...
}
<beans>
<!-- Биндерді түрлендірудің қателік постпроцессоры... -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean id="myProductDao" class="product.ProductDaoImpl"/>
</beans>
Постпроцессор барлық қателерді түрлендіргіштерді (интерфейс PersistenceExceptionTranslator
іске асырулары) автоматты түрде іздейді және @Repository
аннотациясымен белгіленген барлық биндерді Advice-пен қамтамасыз етеді, сондықтан анықталған түрлендіргіштер шығарылған қателерді түрлендіруге сәйкес келеді және оларды ұстап алады.
Жалпы алғанда, әдеттегі тұрақты сақтау қолдауы технологиясының API-интерфейстеріне және аннотацияларына негізделген DAO-ны іске асыруға, Spring басқарылатын транзакциялардың, тәуелділіктерді енгізудің және (қажеттілігіне қарай) қателіктерді Spring-дің жеке қателіктер иерархиясына түрлендірудің артықшылықтарын пайдалана аласыз.
GO TO FULL VERSION