【问题标题】:"IllegalArgumentException: Name must not be null" when deploying to jboss部署到 jboss 时出现“IllegalArgumentException: Name must not be null”
【发布时间】:2016-09-08 00:29:36
【问题描述】:

(我已经解决了这个问题,但在这里发布以帮助其他人。)

我最近从 Grails 2.4.4 升级到 Grails 3。在部署到 JBoss EAP 6.4 (Wildfly 7) 时,我在服务器日志中收到以下错误并且应用程序无法启动:

09-06 20:46:18,463 ERROR [org.jboss.as.web.deployment.JBossContextConfig] (ServerService Thread Pool -- 90) JBAS018202: Error calling onStartup for servlet container initializer: org.springframework.web.SpringServletContainerInitializer: java.lang.IllegalArgumentException: Name must not be null
    at org.springframework.util.Assert.notNull(Assert.java:115) [spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:214) [spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:284) [spring-core-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.grails.transaction.ChainedTransactionManagerPostProcessor.resolveTransactionManagerClass(ChainedTransactionManagerPostProcessor.java:158) [grails-core-3.1.5.jar:3.1.5]
    at org.grails.transaction.ChainedTransactionManagerPostProcessor.hasJtaOrChainedTransactionManager(ChainedTransactionManagerPostProcessor.java:143) [grails-core-3.1.5.jar:3.1.5]
    at org.grails.transaction.ChainedTransactionManagerPostProcessor.postProcessBeanDefinitionRegistry(ChainedTransactionManagerPostProcessor.java:119) [grails-core-3.1.5.jar:3.1.5]
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:123) [spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678) [spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) [spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at grails.boot.GrailsApp.run(GrailsApp.groovy:55) [grails-core-3.1.5.jar:3.1.5]

我在应用中有两个不同的数据源,都在JNDI中注册了。

通过调试器运行后,我看到transactionManagerBeanDefinition.getBeanClassName() 返回null,但我不知道为什么。

为什么会发生这个错误,我该如何解决?

【问题讨论】:

    标签: jboss grails-3.0


    【解决方案1】:

    This link 引导我找到答案。

    问题似乎是我的应用程序中存在多个数据源导致的,这导致Spring/JBoss在设置事务管理器时感到困惑。

    解决方案是在application.yml 中为第二个数据源设置transactional: false。这对我来说很完美,因为第二个数据源无论如何都是只读的。

    application.yml:

    dataSources:
        dataSource:
            dialect: "..."
        otherDataSource:
            dialect: "..."
            transactional: false  <------ add this line
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2016-06-17
      • 2015-01-26
      相关资源
      最近更新 更多