Glassfish 4 在禁用 CDI 的情况下扫描 @PostConstruct
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.
有问题的 class 是一个抽象的 class,在我尝试部署的应用程序中没有实现,它只是我的 class 路径上的东西。
为什么 Glassfish 在我禁用 CDI 时验证我的 @PostConstruct
?为什么 Glassfish 对不能成为 bean 的东西进行验证 @PostConstruct
?
我如何才能防止 Glassfish 干扰我正在使用 Spring
的 任何东西?
注解@PostConstruct
是任何依赖注入机制中使用的通用注解。 Javadoc 明确指出,除非在拦截器中使用,否则必须将其放在具有 void
return 类型且不抛出任何已检查异常的方法上。
奇怪的是 Spring 允许在 post-construct 方法上检查异常,因为没有办法处理它们。但是由于此要求只是验证并且可以忽略,因此 Spring 可能会忽略已检查的异常,而 Glassfish 不会。可能有一个不必要的 Glassfish 功能,它扫描并验证所有 类,即使未在 CDI 或任何其他机制(EJB,...)中使用
最好的办法是删除已检查的异常以使代码与文档保持一致并使其可移植。
您可以先添加一个 web.xml with metadata-complete="true" 来解决这个问题。接下来您需要确保您的上下文位于 Web 根目录 /WEB-INF/.
使用这个 glassfish 可以加载所有@PostConstructSpring 依赖项。
我认为更多的是变通。
我正在为一组 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.
有问题的 class 是一个抽象的 class,在我尝试部署的应用程序中没有实现,它只是我的 class 路径上的东西。
为什么 Glassfish 在我禁用 CDI 时验证我的 @PostConstruct
?为什么 Glassfish 对不能成为 bean 的东西进行验证 @PostConstruct
?
我如何才能防止 Glassfish 干扰我正在使用 Spring
的 任何东西?
注解@PostConstruct
是任何依赖注入机制中使用的通用注解。 Javadoc 明确指出,除非在拦截器中使用,否则必须将其放在具有 void
return 类型且不抛出任何已检查异常的方法上。
奇怪的是 Spring 允许在 post-construct 方法上检查异常,因为没有办法处理它们。但是由于此要求只是验证并且可以忽略,因此 Spring 可能会忽略已检查的异常,而 Glassfish 不会。可能有一个不必要的 Glassfish 功能,它扫描并验证所有 类,即使未在 CDI 或任何其他机制(EJB,...)中使用
最好的办法是删除已检查的异常以使代码与文档保持一致并使其可移植。
您可以先添加一个 web.xml with metadata-complete="true" 来解决这个问题。接下来您需要确保您的上下文位于 Web 根目录 /WEB-INF/.
使用这个 glassfish 可以加载所有@PostConstructSpring 依赖项。
我认为更多的是变通。