繁体   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