[英]Glassfish 4 scans for @PostConstruct with CDI disabled
我正在做一些Spring
應用程序並從Glassfish 3.1.2.2
升級到Glassfish 4.1
。 由於我使用Spring
來處理@Inject
注釋,因此我使用以下命令禁用了Glassfish的CDI:
asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
但是,當我部署我的一個應用程序時,我收到以下錯誤消息:
The lifecycle method [something] must not throw a checked exception.
Related annotation information: annotation [@javax.annotation.PostConstruct()]
on annotated element [public void com.something.MyClass.something() throws
java.io.IOException] of type [METHOD]. Please see server.log for more details.
有問題的類是一個抽象類,在我試圖部署的應用程序中沒有實現,它只是我的類路徑上的東西。
當我禁用CDI時,為什么Glassfish會驗證我的@PostConstruct
? 為什么Glassfish在不能成為bean的東西上驗證@PostConstruct
? 如何防止Glassfish干擾我使用Spring
任何東西 ?
注釋@PostConstruct
是在任何依賴注入機制中使用的通用注釋。 Javadoc明確指出,除非在攔截器中使用,否則必須將它放在一個方法上,該方法具有void
返回類型並且不會拋出任何已檢查的異常。
Spring允許在post-construct方法上檢查異常是很奇怪的,因為沒有辦法處理它們。 但由於這個要求只是一個驗證而且可以忽略,因此Spring可能會忽略已檢查的異常,而Glassfish則不會。 可能有一個不必要的Glassfish功能,它掃描並驗證所有類,即使沒有在CDI或任何其他機制中使用(EJB,...)
最好的方法是刪除已檢查的異常,以使代碼與文檔保持一致並使其可移植。
您可以首先通過添加帶有metadata-complete =“true”的web.xml來解決此問題。 接下來,您需要確保您的上下文位於Web根目錄/ WEB-INF /中。
使用此glassfish可以加載所有@PostConstructSpring依賴項。
在我看來,更多的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.