服务 jboss.web.deployment.default-host./.realm 已经注册

Posted

技术标签:

【中文标题】服务 jboss.web.deployment.default-host./.realm 已经注册【英文标题】:Service jboss.web.deployment.default-host./.realm is already registered 【发布时间】:2013-07-29 09:00:15 【问题描述】:

我正在尝试将三个不同的 ear 文件部署到同一个 Jboss 服务器...

其中一个没有上下文根,另外两个有,但又不同。我的意思是,让我们把三只耳朵分别称为一耳、二耳和三耳:

one.ear 有:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/</context-root>
</jboss-web>

two.ear 有:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/two</context-root>
</jboss-web>

three.ear 没有。

当我尝试给 Jboss (7 AS) 加星时,我得到了这个:

16:01:31,962 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC00001: Failed to start service jboss.deployment.subunit."one-ear.ear"."one.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.subunit."one-ear.ear"."one.war".INSTALL: Failed to process phase INSTALL of subdeployment "one.war" of deployment "one-ear.ear"
    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_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_45]
    at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_45]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: JBAS018027: Failed to add JBoss Web deployment service
    at org.jboss.as.web.deployment.WarDeploymentProcessor.processDeployment(WarDeploymentProcessor.java:320)
    at org.jboss.as.web.deployment.WarDeploymentProcessor.deploy(WarDeploymentProcessor.java:114)
    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
Caused by: org.jboss.msc.service.DuplicateServiceException: Service jboss.web.deployment.default-host./.realm is already registered
    at org.jboss.msc.service.ServiceRegistrationImpl.setInstance(ServiceRegistrationImpl.java:154) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl.startInstallation(ServiceControllerImpl.java:227) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceContainerImpl.install(ServiceContainerImpl.java:560) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceTargetImpl.install(ServiceTargetImpl.java:201) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$ChildServiceTarget.install(ServiceControllerImpl.java:2228) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceTargetImpl.install(ServiceTargetImpl.java:201) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$ChildServiceTarget.install(ServiceControllerImpl.java:2228) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceBuilderImpl.install(ServiceBuilderImpl.java:307) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.as.web.deployment.WarDeploymentProcessor.processDeployment(WarDeploymentProcessor.java:269)
    ... 7 more

我了解到,当同一服务器中的两个应用程序具有相同的上下文根时,可能会引发此错误,但事实并非如此......发生了什么?

【问题讨论】:

【参考方案1】:

一般来说,Jboss等容器的上下文根为

<context-root>/</context-root>

拦截所有传入的请求并传递给应用程序服务器。在您的我怀疑冲突的应用程序是 JBoss AppServer 根本身,您可以使用以下 (enable-welcome-root="false") 禁用它

<subsystem xmlns="urn:jboss:domain:web:1.0">
  <connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http"/>
  <virtual-server name="localhost" enable-welcome-root="false">
    <alias name="example.com"/>
  </virtual-server>
</subsystem>

【讨论】:

@Juned,这并没有解决这个问题。【参考方案2】:

检查哪个--server-config 文件用于启动服务器。在我的例子中是standalone-ha.xml,而不是预期的standalone.xml

【讨论】:

【参考方案3】:

对我来说,重启 JBoss 服务器就足够了。 不知道为什么。

【讨论】:

【参考方案4】:

尝试从 Web 服务器中删除 .war 存档,然后再次部署。您可以通过 jboss 管理控制台执行此操作。也可能是您在jboss-web.xml 中部署了具有相同&lt;context-root&gt; 元素值的另一个应用程序。

【讨论】:

【参考方案5】:

这解决了我的问题 - 转到你的standalone.xml - JBoss 引用的那个

在standalone.xml - 你会找到部署部分

  <deployments>
        <deployment name="YOUR_APP.ear" runtime-name="YOUR_APP-version-SNAPSHOT.ear">
            <fs-archive path="C:\YOUR_APP-version-SNAPSHOT.ear"/>
        </deployment>
    </deployments>

如果您尝试部署较新版本或不同版本的耳朵 - 它会给出这样的错误。

从部署部分中删除这部分并保持为空

  <deployments>
 <!-- remove the deployment from here --> 
    </deployments>

然后重新启动您的服务器 - 它会再次部署 YOUR_APP.ear

现在它将显示 - 新版本

<deployments>
        <deployment name="YOUR_APP.ear" runtime-name="YOUR_APP-NEW_version-SNAPSHOT.ear">
            <fs-archive path="C:\YOUR_APP-_NEW_version-SNAPSHOT.ear"/>
        </deployment>
    </deployments>

【讨论】:

以上是关于服务 jboss.web.deployment.default-host./.realm 已经注册的主要内容,如果未能解决你的问题,请参考以下文章

springboot-服务治理

微服务基础服务的基本组件

服务发现的基本原理

OSGI的系统服务

Linux用户管理-服务服务管理

微服务 六:服务网关