Friends
  I have the following situation. 
  I have an interface that implements a simple CRUD with the methods annotated 
with @Transactional(REQUIRED). 
  The class that implements this interface uses a session of the Hibernate with 
corresponding DAO interface. Until now, no mystery.
  The problem occurs when I use the instance in backing bean. The transaction 
does not finish after method execution,
  and I can't capture exceptions generated by the DataBase.
  
  What kind of configuration do I need to do for application finish the 
transaction correctly, after method execution?
  
  Thank's.

  Below examples of the codes


GenericDAO

  |   public interface GenericDAO<T, PK extends Serializable> {
  |       @Transactional(TransactionPropagationType.MANDATORY)
  |       public T save(T o) throws Exception;
  |       
  |       @Transactional(TransactionPropagationType.MANDATORY)
  |       public void delete(T o) throws Exception;
  |   }
  | 


GenericDAOImpl

  |   public class GenericDAOImpl<T, PK extends Serializable> implements 
GenericDAO<T, PK> {
  |       public T save(T o) throws Exception {
  |           return o;
  |       }
  | 
  |       public void delete(T o) throws Exception {
  |           session.delete(o);
  |       }
  |   }
  | 
  
  
BusinessManager
  
  |   public interface BusinessManager<T, PK extends Serializable> {
  |       @Transactional(value = TransactionPropagationType.REQUIRED)
  |       public void save(T object) throws BusinessException;
  | 
  |       @Transactional(value = TransactionPropagationType.REQUIRED)
  |       public void remove(PK id) throws BusinessException;
  |   }
  | 


BusinessManagerImpl

  |   public class BusinessManagerImpl<T, PK extends Serializable> implements 
BusinessManager<T, PK> {
  |       public void save(T object) throws BusinessException {
  |           try {
  |               genericDAO.saveOrUpdate(object);
  |           } catch (Exception dae) {
  |               throw new BusinessException(dae);
  |           }
  |       }
  | 
  |       public void remove(PK id) throws BusinessException {
  |           try {
  |               genericDAO.remove(id);
  |           } catch (Exception dae) {
  |               throw new BusinessException(dae);
  |           }
  |       }
  |   }
  | 
  
  
spring-beans-dao.xml

  |   <bean id="projetoDAO" 
class="br.com.develop.fw.persistence.GenericDAOImpl">
  |             <property name="clazz"  
value="br.com.develop.ponto.model.Projeto" />
  |             <seam:component/>
  |     </bean>
  | 


spring-beans-business.xml

  |     <bean id="projetoManager" 
class="br.com.develop.fw.business.BusinessManagerImpl" scope="singleton">
  |             <property name="genericDAO" ref="projetoDAO"/>
  |             <seam:component/>
  |     </bean>
  | 


ProjetoAction (Backing Bean)

  |   @Name("projetoAction")
  |   @Scope(ScopeType.CONVERSATION)
  |   public class ProjetoAction extends AbstractBackingBean<Projeto> 
implements Serializable {
  |       @In("projetoManager")
  |       private BusinessManager<Projeto, Serializable> projetoManager;
  |       
  |       @Restrict
  |       public void delete() {
  |           try {
  |               log.debug("will be delete...");
  |               projetoManager.remove(selected.getId());
  |               log.debug("deleted??");
  |               FacesMessages.instance().add("{0} has been removed.", new 
Object[] { selected.getNome() });
  |           } catch (Throwable e) {
  |               addMessage("Faild to remove");
  |           }
  |       }
  | 


Exception

  | 2007-06-06 17:03:43,312 DEBUG 
[br.com.develop.ponto.action.ProjetoAction:79:<delete>] - [admin] will be 
delete...
  | 2007-06-06 17:03:43,312 DEBUG 
[br.com.develop.ponto.action.ProjetoAction:81:<delete>] - [admin] deleted??
  | 2007-06-06 17:03:44,921 DEBUG [org.hibernate.SQL:401:<log>] - [admin] 
delete from PROJETOS where ID=?
  | Hibernate: delete from PROJETOS where ID=?
  | 2007-06-06 17:03:44,984  WARN 
[org.hibernate.util.JDBCExceptionReporter:77:<logExceptions>] - SQL Error: 0, 
SQLState: 23503
  | 2007-06-06 17:03:44,984 ERROR 
[org.hibernate.util.JDBCExceptionReporter:78:<logExceptions>] - [admin] ERROR: 
update or delete on table "projetos" violates foreign key constraint 
"fk_projeto" on table "importacao_funcionario"
  |   Detalhe: Key (id)=(1) is still referenced from table 
"importacao_funcionario".
  | 2007-06-06 17:03:45,000 ERROR 
[org.hibernate.event.def.AbstractFlushingEventListener:301:<performExecutions>] 
- [admin] Could not synchronize database state with session
  | org.hibernate.exception.ConstraintViolationException: could not delete: 
[br.com.develop.ponto.model.Projeto#1]
  |     at 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
  |     at 
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
  |     at 
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2541)
  |     at 
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2697)
  | 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4051896#4051896

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4051896
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to