Caused by: org.jboss.msc.service.DuplicateServiceException: XXX is already registered"

 

使用 jboss + Maven + Java Spring MVC 出現的bug...

狀況說明:

使用 eclipse搭配 Maven build 出 war 檔後

我在 jboss-eap-6.4 上佈署了兩個不同的 war 檔, 先佈署的是 a.war , 後面的是 b.war

第一個佈署的不會有問題, 但第二個會有

 

錯誤訊息:

這裡只列出重要的訊息....

Caused by: org.jboss.msc.service.DuplicateServiceException: 
Service jboss.ws.endpoint.context
=xxxxx.\"com.aaa.bbb.cccImpl\" 
is already registered"}}}}

 

分析:

首先找DuplicateServiceException定義:

參考:http://doc.javanb.com/jboss-3-2-7-varia-api/org/jboss/services/binding/DuplicateServiceException.html

 

意思是, 當 jboss 試圖重複增加一個已經被配置儲存並存在的 service, 這個 exception 會被拋出 

檢查了下

a.war (第一個war) 佈署完時

會在jboss中某個資料夾出現與我的 war 同名資料夾, 

底下會放 xxxxx.\"com.aaa.bbb.cccImpl\"  這個檔案

 

但b.war佈署完時不會出現, 

又在亂槍打鳥 google 時在 jboss 的網站找到與我出現一樣exception 的範例 :

https://developer.jboss.org/thread/249844

在 b.war 裡找了下jboss-web.xml 這個檔案, 裡面果然 context-root 設成 a 了

怪不得 jboss 會去找 a 裡面的服務

改成 b 後就解決了

 

P.S 稍微喵了一下 JBoss 的官方文件真的是博大精深...有空的人可以在下面Red Hat 的官方網站研究

https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.2.beta/