【发布时间】:2015-06-01 12:06:32
【问题描述】:
我只是在测试从Seam3迁移到DeltaSpike,如果一个bean中只有一个EntityManager,一切正常,但是如果添加其他EntityManager(其他数据源)就会出错:
JBAS010152:应用程序错误:事务在请求中仍处于活动状态,状态为 0
错误项目:
https://github.com/yuanqixun/hellodeltaspike
运行这个项目环境:
- wildfly 8.2.0.Final
- H2 数据源
- MySql 数据源
EntityManagerProducer 代码:
@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();
}
}
动作代码:
@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
【问题讨论】:
-
欢迎您!如果您可以将问题缩小到最小范围以重现错误,您可能会获得更多支持。阅读整个项目来调试它是一项艰巨的任务,尤其是对于没有报酬的人。祝你好运。
-
@Ciyan 我添加了示例代码。
标签: seam3