Deklarativní transakční management

Typickým příkladem využití AOP funkcionality rámce Spring™ pro poskytnutí deklarativních služeb spravovaným objektům je deklarativní transakční management.

Zabíháme teď sice trochu do tématu podpory datové vrstvy rámcem Spring™, kterému se budou věnovat navazující diplomové práce, ale předvedeme si jen stručný příklad s důrazem na jeho význam pro pochopení AOP funkcionality rámce Spring.

Vzhledem k tomu, že v přiložené vzorové aplikaci používáme na datové vrstvě ORM nástroj Hibernate™, tak i následující příklad využívá definice tříd specifických pro podporu rámce Spring právě tomuto nástroji.

<bean id="transactionManager" 
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <property name="transactionManager" ref="transactionManager"/>
  <property name="transactionAttributeSource">
    <value>
cz...MailManager.sendActivation*=PROPAGATION_REQUIRED
cz...MailManager.sendEmailWithNewCompetitorLoginData=PROPAGATION_MANDATORY
cz...MailManager.sendEmail=PROPAGATION_REQUIRED,-MyCheckedException</prop>
    </value>
  </property>
</bean>

<bean id="mailManager" 
      class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces" 
            value="cz.morosystems.sportportal.managers.MailManager" />
  <property name="target" ref="mailManagerTarget"/>
  <property name="interceptorNames">
    <list>
      <value>transactionInterceptor</value>
      <value>sampleAdvisor</value>
    </list>
  </property>
</bean>

V zájmu využít předchozích příkladů, kde figuruje servisní třída MailManager, jsme aplikovali deklarativní transakční management na tuto třídu. To má ovšem smysl pouze v případě, že tato servisní třída pracuje s Hibernate™ DAO vrstvou, což tedy tiše předpokládáme.

Na příkladu také vidíme, že Hibernate transakční manažer se odvolává na objekt sessionFactory, který nás ovšem momentálně nezajímá. Jinak princip aplikace transakčního pokynu reprezentovaného třídou TransactionInterceptor je stejný jako u všech ostatních pokynů. Pro aplikaci definovaných transakčních pravidel na konkrétní servisní třídu je opět nutno pokyn zařadit mezi pokyny AOP proxy objektu této servisní třídy.

Jak už bylo řečeno, konkrétní význam definovaných pravidel bude vysvětlen v navazujících diplomových pracích. Popsané i některé pokročilé možnosti AOP modulu rámce Spring lze včetně dalšího popisu nalézt v přiložené vzorové aplikaci, konkrétně v konfiguračním souboru WEB-INF\spring\applicationContext-business.xml.

Komentáře

Téma neobsahuje žádné komentáře.

Vložit komentář

Můžete používat značkovací jazyk Texy!


Jméno:
E-mail:
Url:
Komentář:
1 + 2 =
 
MoroSystems, s.r.o.