Bom dia pessoal, estou com dificuldade para obter uma exception a partir de um DAO que faz herança da classe JpaDaoSupport do Spring.
Minha aplicação está dividida em 3 camadas:
Serviço > BO > DAO
O método getPessoaFisicas no BO:
public class PessoaFisicaBOImpl implements PessoaFisicaBO {
…
public List getPessoaFisicas(int batchSize, int firstItem) {
return pessoaFisicaDao.find(“select r from PessoaFisica r”);
}
…
}
O método find na camada DAO:
public class PessoaFisicaDaoImpl extends JpaDaoSupport implements PessoaFisicaDao {
…
public List find(String queryString, Object…values) {
try {
return getJpaTemplate().find(queryString);
}catch(Exception e) {
throw new PersistenciaException(“Camada de Persistencia. Error ao processar.”, e);
}
}
…
}
Quando o servidor de aplicação perde a conexão com o banco de dados, eu gostaria de pegar a exception no DAO e re-lançar novamente, e isso não acontece, porque o Spring faz o controle de transação, ou seja, antes de executar o método find do DAO ele lança a exception e essa exception vai para a camada BO, eu gostaria de saber como faço para primeiro essa exception seja tratada no DAO, para depois passar ao BO e re-lançar como PersistenciaException(…), ou seja, essa exception vai chegar no BO como PersistenciaException.
Desde já agradeço pela atenção.
Configuração do spring:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="servirPU" />
</bean>
<tx:advice id="managerTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="managerMethods"
expression="execution(* meudominio.modulo.cadastro.pessoafisica.dao.*Dao*.* (..))" />
<aop:advisor advice-ref="managerTxAdvice" pointcut-ref="managerMethods" />
</aop:config>
<!-- ********************** -->
<!-- Injeção de Dependência -->
<!-- ********************** -->
<!-- PessoaFisica - [SERVICO > BO > DAO] -->
<bean id="pessoaFisicaDao" class="meudominio.modulo.cadastro.pessoafisica.dao.impl.PessoaFisicaDaoImpl">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="pessoaFisicaBO" class="meudominio.modulo.cadastro.pessoafisica.bo.impl.PessoaFisicaBOImpl">
<property name="pessoaFisicaDao" ref="pessoaFisicaDao"/>
</bean>
<bean id="pessoaFisicaServico" class="meudominio.modulo.cadastro.pessoafisica.servico.impl.PessoaFisicaServicoImpl">
<property name="pessoaFisicaBO" ref="pessoaFisicaBO"/>
</bean>