Java WebSphere中@PostConstruct异常处理的行为

Java WebSphere中@PostConstruct异常处理的行为,java,jsf,websphere-7,websphere-portal,postconstruct,Java,Jsf,Websphere 7,Websphere Portal,Postconstruct,Short:(Portlet-)容器接受支持bean中@PostConstruct方法引发的异常 这种行为是故意的,是bug还是特定于容器 Long:我正在WebSpherePortal7上运行一个portlet,在这里我强制在PhaseListener中构建托管bean,以便当系统在bean构建/后期构建过程中遇到不可恢复的问题时,它可以将用户发送回起始页 我使用以下代码“强制”施工: @SuppressWarnings("unchecked") public static <T>

Short:(Portlet-)容器接受支持bean中@PostConstruct方法引发的异常

这种行为是故意的,是bug还是特定于容器

Long:我正在WebSpherePortal7上运行一个portlet,在这里我强制在PhaseListener中构建托管bean,以便当系统在bean构建/后期构建过程中遇到不可恢复的问题时,它可以将用户发送回起始页

我使用以下代码“强制”施工:

@SuppressWarnings("unchecked")
public static <T> T getManagedBean(final String beanName)
{
    final FacesContext context = getFacesContext();
    return (T)context.getApplication().evaluateExpressionGet(context, "#{" + beanName + "}", Object.class);
}
stacktrace最终出现在RAD(Eclipse)日志中:

但是在我的PhaseListener中没有任何异常可以捕捉,并且它在@PostConstruct期间愉快地继续,而没有意识到异常

这种行为是故意的,是bug还是特定于容器


看起来至少JBoss有类似的处理方式:

根据Servlet 3.0规范第15.5.9节:

@PostConstruct注释必须由所有 支持依赖项注入和调用,即使类不支持 请求注入任何资源。如果该方法抛出 未经检查的异常该类不得投入使用 可以调用该实例上的方法


如果您看到不同的行为,那么这看起来像是产品缺陷。如果servlet没有投入服务,但异常被吞没,这听起来像是可维护性缺陷。在任何一种情况下,我都建议与IBM建立PMR。请注意,您的服务条款不太可能允许对WebSphere Application Server类进行反编译,即使是出于调试目的。

谢谢我的一位同事,他还提到不应将该类放在会话中。但它肯定在那里。
@PostConstruct
public void initialize()
{
    throw new RuntimeException("test");
}
com.ibm.ws.webcontainer.annotation.WASAnnotationHelper doInvoke unable to invoke method --> [initialize] on class --> [foo.bar.UpdateAddress]
                             java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.doInvokeSingle(WASAnnotationHelper.java:432)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.doInvokeChain(WASAnnotationHelper.java:400)
at com.ibm.ws.webcontainer.annotation.WASAnnotationHelper.doPostConstruct(WASAnnotationHelper.java:220)
at com.sun.faces.vendor.WebSphereInjectionProvider.invokePostConstruct(WebSphereInjectionProvider.java:86)
at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:225)
...
Caused by: java.lang.RuntimeException: test
    at foo.bar.UpdateAddress.initialize(UpdateAddress.java:119)
    ... 121 more