簡體   English   中英

Glassfish 4掃描@PostConstruct並禁用CDI

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM