迁移到Java 8和WildFly 8.2.0后,我在每个事务
上都会出现此错误UserTransaction:javax.naming.NameNotFoundException:UserTransaction [根异常是java.lang.IllegalStateException:JBAS014237:仅 具有bean管理事务的会话和消息驱动Bean 划分允许访问UserTransaction] org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:140) 在 org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:81) 在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:202) 在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179) 在 org.jboss.as.naming.InitialContext $ DefaultInitialContext.lookup(InitialContext.java:235) 在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:188) 在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184) 在javax.naming.InitialContext.lookup(InitialContext.java:417) [rt.jar:1.8.0_45] at javax.naming.InitialContext.lookup(InitialContext.java:417) [rt.jar中:1.8.0_45]
Bean具有注释@TransactionManagement(TransactionManagementType.BEAN)
这是异常发生的地方:
final javax.naming.Context tmpNamingContext = new javax.naming.InitialContext();
userTransaction = ((UserTransaction) tmpNamingContext.lookup("java:jboss/UserTransaction"));
我不知道这里发生了什么,也找不到任何好的解决方案。
请帮忙。
答案 0 :(得分:2)
使用注释@Resource
获取UserTransaction而不是通过JNDI名称是解决方案。 UserTransaction在WildFly 8.2.0中已不复存在,在JBoss中它已经设置好了。
这解决了这个问题。