名为' XXX'的组件已在JBoss 7.1.1中的此模块中定义

时间:2012-11-01 05:15:27

标签: java spring jboss jboss7.x spring-3

我没有在我的应用程序中使用TimerServiceDispatcher创建spring bean名称。但是,由于JBoss导致的TimerServiceDispatcher抛出异常已在此模块中定义。 我不知道是什么问题。我错过了什么?我需要做什么?

我的应用程序使用Seam 2.3,Spring 3.0和JPA 2.0。我不使用EJB

11:29:01,531 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "MRBS.war"
11:29:04,217 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC00001: Failed to start service jboss.deployment.unit."MRBS.war".PARSE: org.jboss.msc.service.StartExcept
ion in service jboss.deployment.unit."MRBS.war".PARSE: Failed to process phase PARSE of deployment "MRBS.war"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_23]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_23]
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_23]
Caused by: java.lang.IllegalArgumentException: JBAS011046: A component named 'TimerServiceDispatcher' is already defined in this module
    at org.jboss.as.ee.component.EEModuleDescription.addComponent(EEModuleDescription.java:137)
    at org.jboss.as.ejb3.deployment.processors.EJBComponentDescriptionFactory.addComponent(EJBComponentDescriptionFactory.java:60)
    at org.jboss.as.ejb3.deployment.processors.SessionBeanComponentDescriptionFactory.processSessionBeans(SessionBeanComponentDescriptionFactory.java:157)
    at org.jboss.as.ejb3.deployment.processors.SessionBeanComponentDescriptionFactory.processAnnotations(SessionBeanComponentDescriptionFactory.java:86)
    at org.jboss.as.ejb3.deployment.processors.AnnotatedEJBComponentDescriptionDeploymentUnitProcessor.processAnnotations(AnnotatedEJBComponentDescriptionDeploymentUnitProcessor.java:
58)
    at org.jboss.as.ejb3.deployment.processors.AbstractDeploymentUnitProcessor.deploy(AbstractDeploymentUnitProcessor.java:81)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 5 more

11:29:04,230 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "MRBS.war" was rolled back with failure message {"JBAS014671: Failed servi
ces" => {"jboss.deployment.unit.\"MRBS.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"MRBS.war\".PARSE: Failed to process phase PARSE of d
eployment \"MRBS.war\""}}
11:29:04,292 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-6) JBAS015877: Stopped deployment MRBS.war in 61ms
11:29:04,294 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.deployment.unit."MRBS.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."MRBS.war".
PARSE: Failed to process phase PARSE of deployment "MRBS.war"

的JBoss部署-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
      <dependencies>
          <module name="org.hibernate" export="true"/>
          <module name="javax.faces.api" export="true" />
          <module name="com.sun.jsf-impl" export="true"/>
          <module name="org.dom4j" export="true"/>
          <module name="org.hibernate.validator" export="true"/>
        </dependencies>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>       
  </deployment>  
</jboss-deployment-structure> 

深度结构

MRBS.war
    -index.html
    +web-page-pakage
    +META-INF
    +WEB-INF
        +classes
        +lib
           aopalliance.jar
            commons-beanutils.jar
            commons-codec.jar
            commons-lang-2.5.jar
            drools-compiler.jar
            drools-core.jar
            drools-decisiontables.jar
            drools-templates.jar
            eclipselink.jar
            el-api.jar
            guava.jar
            guice.jar
            hibernate-ehcache.jar
            httpclient.jar
            httpcore.jar
            javax.persistence_2.0.1.v201006031150.jar
            jboss-el.jar
            jboss-seam-debug.jar
            jboss-seam-excel.jar
            jboss-seam-ioc.jar
            jboss-seam-mail.jar
            jboss-seam-pdf.jar
            jboss-seam-ui.jar
            jboss-seam.jar
            junit-4.8.1.jar
            log4j-1.2.14.jar
            mysql-connector-java-5.1.6-bin.jar
            primefaces-3.3.1.jar
            sac.jar
            spring-aop.jar
            spring-asm.jar
            spring-beans.jar
            spring-context.jar
            spring-core.jar
            spring-expression.jar
            spring-jdbc.jar
            spring-orm.jar
            spring-tx.jar
            spring-web.jar
            urlrewritefilter.jar
            xercesImpl.jar
            xml-apis.jar
        -components.xml     
        -faces-config.xml
        -jboss-deployment-structure.xml
        -pages.xml
        -web.xml

10 个答案:

答案 0 :(得分:21)

我有一个用@Singleton和@Stateless注释的bean触发了这个错误。我的代码当然是错的,但是这样的消息和帖子让我走错了一段时间。

答案 1 :(得分:12)

我知道这个问题的答案。由于我的顽固性,我花了几周时间使用JBoss支持。他们计划使用EAP 6.2.x版本提供修复或至少更好的消息传递。

问题出现在EJB Annotation预处理器上 - 它将您的战争,以及编译到其中的lib并扫描它们以获取EJB注释。一些Jar文件可以在Manifest中为“Classpath:”创建一个条目。 (或其他任何东西,但'。'作为其中一个条目)。这会导致注释预处理器再次盲目地处理web-inf lib中的所有jar文件。最后,它会在它已经看到的带有EJB注释的jar文件中找到它,因为它已经被处理过了 - 这导致它抱怨“已经定义了一个名为xxx的组件”。

所以这里最令人沮丧的部分是它可能是一些你甚至不关心的旧jar文件中有不必要的Classpath清单条目 - 并导致JBoss自行递归。

答案 2 :(得分:6)

我有同样的问题,但对我来说,没有一个建议的解决方案有帮助。 我注意到EJB JAR中存在twice newest version and older version WEB.WAR.} {/ 1>

这是因为eclipse中父项目的maven清理操作并没有级联到子项目。 我通过"mvn clean"上的简单child project来修复它。

答案 3 :(得分:4)

运行Maven目标:

  1. wildfly:undeploy
  2. clean
  3. wildfly:deploy
  4. 在我们的案例中有所帮助:

      

    [ERROR]引起:java.lang.IllegalArgumentException:WFLYEE0040:名为&#39; xxx&#39;的组件已在此模块中定义&#34;}}

答案 4 :(得分:4)

我在IntelliJ中遇到了同样的问题。原因是IntelliJ在WEB-INF / classes AND中创建了一个带有我的类的WAR文件,作为WEB-INF / lib中的单独Jar文件。

我花了一些时间才知道为什么IntelliJ会这样做。 原因在于对话文件 - &gt;项目结构 - &gt;工件: IntelliJ Project Structure Dialogue

删除&lt; vertrag-ui-war&#39;编译输出,错误不再发生。 附:我不知道为什么IntelliJ做了这个设置 - 我明确没有设置这个。

答案 5 :(得分:1)

删除@Singleton为我修复了这个错误。不知道为什么。

答案 6 :(得分:0)

问题不在于你创建TimeServiceDispatcher它是一个接缝框架org.jboss.seam.async.TimerServiceDispatcher的类部分,它是一个接缝fw类。

现在关于错误。

当应用程序和服务器提供的库中存在冲突时,会发生这种错误。它在JBoss 7.1中非常常见,也非常令人沮丧。

你需要知道

  1. 您的应用程序中包含了所有库和那些版本的内容吗?
  2. JBoss 7.1
  3. 提供了以上所有库和版本

    现在是两边的图书馆 检查版本

    如果应用程序和JBoss的版本相同,那么从Application(建议)中删除该jar(否则你可以在deployment-structure.xml中配置哪一个使用)

    如果应用程序jar和jboss的版本不同,那么在这种情况下,您需要在部署描述符中配置要选择哪一个。

答案 7 :(得分:0)

在复制粘贴和创建新组件时,我忘记更新@Stateless(value)注释在新组件中接受的值。这意味着我有两个具有相同名称的组件,我收到了这个错误。希望它可以帮到某人。

答案 8 :(得分:0)

这可能是由于部署了早期版本的jar而不是正确的版本引起的。删除目标文件夹的所有内容后,此问题已解决。

答案 9 :(得分:0)

答案帮助我找到了问题的根本原因。 我正在使用Arquillian,并通过

将一个类添加到Web存档中
JavaArchive ja = ShrinkWrap.create(JavaArchive.class, "myejb.jar")
            .addPackages(true, "a.package.name")

并作为maven依赖项

        File[] files = Maven.resolver()
            .addDependencies(
                MavenDependencies.createDependency("G:A:V", ScopeType.COMPILE, false),

因此出现了先前描述的错误。 我只留下了Maven依赖,错误消失了。