首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >问题从Seam3迁移到DeltaSpike

问题从Seam3迁移到DeltaSpike
EN

Stack Overflow用户
提问于 2015-03-28 02:17:33
回答 1查看 99关注 0票数 0

我只是在测试如何从Seam3迁移到DeltaSpike,如果一个bean中只有一个EntityManager,那么一切都是正常的,但是如果添加其他EntityManager(其他数据源),则会出现错误:

JBAS010152:应用程序错误:请求中仍处于活动状态的事务,状态为0

错误项目:

https://github.com/yuanqixun/hellodeltaspike

运行此项目环境:

  1. 野蝇8.2.0
  2. H2数据源
  3. MySql数据源

EntityManagerProducer代码:

代码语言:javascript
复制
@ApplicationScoped
public class EntityManagerProducer {

  @PersistenceUnit(unitName = "hellodeltaspike")
  EntityManagerFactory emf;

  @PersistenceUnit(unitName = "hellodeltaspike2")
  EntityManagerFactory mysqlemf;

  @Produces
  @ConversationScoped
  EntityManager createEntityManager(){
    return this.emf.createEntityManager();
  }

  @Produces
  @MySqlEm
  @ConversationScoped
  EntityManager createMysqlEntityManager(){
    return this.mysqlemf.createEntityManager();
  }

}

行动守则:

代码语言:javascript
复制
@ConversationScoped
@Named
public class PersonAction implements Serializable{

  @Inject
  EntityManager em;

  @Inject
  @MySqlEm
  EntityManager mysqlEm;

  Person person;

  List<Person> personList;

  @PostConstruct
  void afterCreate(){
    person = new Person();
    personList = queryPersonList();
  }

  private List<Person> queryPersonList() {
    String jql = "select o from Person o ";
    List<Person> result = em.createQuery(jql,Person.class).getResultList();
    if(result == null)
      return new ArrayList<Person>();
    return result;
  }


  @Transactional
  public void btnDoSave(ActionEvent event){
    try {
      if(StringUtils.isEmpty(person.getUuid())){
        em.persist(person);
      }else{
        em.merge(person);
      }
      em.flush();
      String msg = "Saved:"+person.getName();
      FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO,msg,null));
      person = new Person();
      personList = queryPersonList();
    } catch (Exception e) {
      e.printStackTrace();
      FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null));
    }
  }
...getter and setter
}

会有错误:ERROR [org.jboss.as.txn] (default task-6) JBAS010152: APPLICATION ERROR: transaction still active in request with status 0

EN

回答 1

Stack Overflow用户

发布于 2015-03-28 12:19:12

修改该方法的注释,添加右EntityManager的特殊限定符,从而解决问题。但也有另一个问题,如何在一个方法中支持多实体管理器的事务?

@Transactional(qualifier = {H2Em.class})

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29312938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档