UserTransaction:迁移到 WildFly 8.2.0 后 javax.naming.NameNotFoundException 和 Java 8
UserTransaction: javax.naming.NameNotFoundException after Migration to WildFly 8.2.0 and Java 8
迁移到 Java 8 和 WildFly 8.2.0 后,我在每个事务中都收到此错误
UserTransaction: javax.naming.NameNotFoundException: UserTransaction
[Root exception is java.lang.IllegalStateException: JBAS014237: Only
session and message-driven beans with bean-managed transaction
demarcation are allowed to access UserTransaction] at
org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:140)
at
org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:81)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:202)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179)
at
org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:235)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:188)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184)
at 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"));
我不知道这里发生了什么,找不到任何好的解决方案。
请帮忙
使用注解 @Resource
而不是通过 JNDI 名称获取 UserTransaction 是解决方案。 UserTransaction 在 WildFly 8.2.0 中不再存在,在 JBoss 中已经设置。
这解决了问题。
迁移到 Java 8 和 WildFly 8.2.0 后,我在每个事务中都收到此错误
UserTransaction: javax.naming.NameNotFoundException: UserTransaction [Root exception is java.lang.IllegalStateException: JBAS014237: Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction] at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:140) at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:81) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:202) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:179) at org.jboss.as.naming.InitialContext$DefaultInitialContext.lookup(InitialContext.java:235) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:188) at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184) at 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"));
我不知道这里发生了什么,找不到任何好的解决方案。
请帮忙
使用注解 @Resource
而不是通过 JNDI 名称获取 UserTransaction 是解决方案。 UserTransaction 在 WildFly 8.2.0 中不再存在,在 JBoss 中已经设置。
这解决了问题。