当前位置: 首页 > 知识库问答 >
问题:

从JBoss7迁移到Wildfly9时带CMT的EJB

上官羽
2023-03-14

我正在将我的应用程序从JBoss7迁移到WildFly(V9.0.1),由于bean事务管理错误,它没有被部署。

    Caused by: javax.naming.NamingException: WFLYNAM0062: Failed to lookup env/com.component.eventmgt.EventServiceImpl/transaction [Root exception is java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed: java:jboss/UserTransaction]
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:157)
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
    at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:316)
    ... 90 more
Caused by: java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed: java:jboss/UserTransaction
    at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:319)
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:143)
    ... 95 more
Caused by: javax.naming.NameNotFoundException: UserTransaction [Root exception is java.lang.IllegalStateException: WFLYEJB0137: 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:153)
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
    at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:316)
    ... 96 more

下面是EventServiceImpl类。

    @Stateless
    @Remote(EventService.class)
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public class EventServiceImpl implements EventService {

        /**
         * Logger
         */
        private static Logger log = LoggerFactory.getLogger(EventService.class);

        private EventTableDAO eventDao;

        @PersistenceContext(unitName = "SOMF-GT")
        private EntityManager entityManager;

        @Resource
        private UserTransaction transaction;

       public List<Map> loadEvents() throws EventsException {

        Configuration configurationEntry = new Configuration();
        try {
            Map configuration = configurationService.getConfiguration();
            if (configuration != null) {

        eventDao = new EventTableDAO(Event.class, entityManager, transaction);
        List<Map> eventsMapList = new ArrayList();
}
}

请提供任何信息!

共有1个答案

景品
2023-03-14

这些变化在Wildfly8中推出,并且(如下所述)基于EJB3.1中的全局JNDI命名空间的标准化。

来自Wildfly 8开发人员指南:

EJB3.1引入了一个标准化的全局JNDI命名空间和一系列映射到Java EE应用程序不同范围的相关命名空间。用于便携JNDI查找的三个JNDI命名空间是java:global、java:module和java:app。如果在应用程序中使用JNDI查找,则需要更改它们以遵循新的标准化JNDI命名空间约定。

《指南》进一步指出:

Wildfly8加强了JNDI命名空间名称,为应用服务器中绑定的每个名称提供可预测和一致的规则,并防止未来的兼容性问题。这意味着,如果应用程序中的当前命名空间不遵循新规则,您可能会遇到问题。

下面是表中的一个片段,展示了以前版本中JNDI映射的示例,以及它们现在可能是如何特定于UserTransaction:

Previous Namespace          New Namespaces
------------------          --------------
java:comp/UserTransaction   java:comp/UserTransaction (This will not be accessible for non EE threads, e.g. Threads your application directly creates)
java:comp/UserTransaction   java:jboss/UserTransaction (Globally accessible, use this if java:comp/UserTransaction is not available)

(事务)必需属性

如果客户机在事务中运行并调用企业bean的方法,则该方法将在客户机的事务中执行。如果客户端未与事务关联,则容器在运行方法之前启动一个新事务。

Required属性是所有使用容器管理的事务划分运行的企业bean方法的隐式事务属性。除非需要重写另一个事务属性,否则通常不设置所需属性。因为事务属性是声明性的,所以以后可以很容易地更改它们。

我发现执行此操作需要Transaction(使用事务或扩展持久化上下文),这似乎表明事务将由您管理,正如您在注释@marco中指出的那样。看来您已经做了适当的修改。

 类似资料:
  • 嗨,这是我的场景, 我正在尝试将一个应用程序从JBoss5迁移到JBoss7。 我使用的是jboss-as-7.1.1。最终。 我遇到的错误是: 我看了几个带有相同错误消息的讨论,但我就是不知道我做错了什么。 在部署目录中,我只有一个myapp.war.我没有部署。我有一个依赖项(myapp-ejb.jar)部署为一个模块。 我已经按照https://docs.jboss.org/author/d

  • 下面的方法已经使用了一段时间,当时我正在处理的系统有log4j。现在我们正在从Log4j转移到Log4j2,我会遇到编译问题。 Log4j2 jar:log4j-api-2.12.1.jar,log4j-core-2.12.1.jar 有没有人可以提供一些帮助,以解决上述问题的正确方法是什么?

  • 问题内容: 我们的Oracle数据库遇到了严重的性能问题,我们想尝试将其迁移到基于MySQL的数据库(直接使用MySQL,或者最好是Infobright)。 问题是,在我们实际上不知道新数据库的所有功能是否符合我们的需求之前,我们需要让旧系统和新系统至少重叠数周(如果不是几个月)。 因此,这是我们的情况: Oracle数据库由多个表组成,每百万行。白天,实际上有成千上万的语句,我们无法停止迁移。

  • 问题内容: 在我的应用程序中,我从UIWebView迁移到WKWebView,如何为WKWebView重写这些功能? 和 问题答案: UIWebView => WKWebView等效 关于您可以写: 对于:

  • 考虑: 为什么,我怎么才能让它起作用? 我的CPU是i5-10210u(支持AVX-256)。在X64版本/调试中运行。

  • TypeScript不是凭空存在的。 它从JavaScript生态系统和大量现存的JavaScript而来。 将JavaScript代码转换成TypeScript虽乏味却不是难事。 接下来这篇教程将教你怎么做。 在开始转换TypeScript之前,我们假设你已经理解了足够多本手册里的内容。 如果你打算要转换一个React工程,推荐你先阅读React转换指南。 如果你在写纯JavaScript,你大