JDAL - Aplicación de Ejemplo - Capa de Servicios


Servicios


La capa de servicios de la aplicación es puramente declarativa. Es decir, no contiene código Java. El motivo es que que la aplicación en sí es demasiado simple y esta capa supone una indirección redundante y podría omitirse. Este caso se dará frecuentemente en el tipo de aplicaciones para los que está pensado la librería, sobre todo si la lógica de negocio se concentra en los propios modelos del dominio.

Realizamos la demarcación de las transacciones mediante el namespace aop de spring en el fichero de configuración, iniciando la transacción en cualquier implementación del la interfaz PersistentService

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
		default-lazy-init="false" default-init-method="init">
 
 
	<!-- Tx Advice -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <!-- the transactional semantics... -->
    <tx:attributes>
      <!-- all methods starting with 'get' and 'load' are read-only -->
      <tx:method name="get*" read-only="true"/>
      <tx:method name="load*" read-only="true"/>
      <!-- other methods use the default transaction settings -->
      <tx:method name="*"/>
    </tx:attributes>
  </tx:advice>
 
   <aop:config>
    <!-- Make all methods on package service transactional  -->
     <aop:pointcut id="serviceOperation" 
     	expression="execution(* org.jdal.samples.library.service.*.*(..)) or execution(* info.joseluismartin.service.*.*(..))"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
  </aop:config>
 
  <bean id="persistentService" class="info.joseluismartin.logic.PersistentManager">
  	<property name="dao" ref="basicDao"/>
  </bean>
 
  <bean id="bookService" class="info.joseluismartin.logic.PersistentManager">
  	<property name="dao" ref="bookDao"/>
  </bean>
 
  <bean id="authorService" class="org.jdal.samples.library.logic.AuthorManager">
  	<property name="dao" ref="authorDao"/>
  </bean>
 
  <bean id="categoryService" class="info.joseluismartin.logic.PersistentManager">
  	<property name="dao" ref="categoryDao"/>
  </bean>
 
</beans>
 

Por último nos queda realizar la capa de Presentación