UserTransaction:迁移到WildFly 8.2.0和Java 8后的javax.naming.NameNotFoundException

时间:2015-07-21 12:03:54

标签: java transactions wildfly wildfly-8

迁移到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"));

我不知道这里发生了什么,也找不到任何好的解决方案。

请帮忙。

1 个答案:

答案 0 :(得分:2)

使用注释@Resource获取UserTransaction而不是通过JNDI名称是解决方案。 UserTransaction在WildFly 8.2.0中已不复存在,在JBoss中它已经设置好了。

这解决了这个问题。