You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Weld后引入Omnifaces 2.6启动失败求助

问题分析与解决方案

你遇到的核心问题是JSF初始化流程过早触发了OmniFaces对CDI容器的访问,而此时Weld还未完成启动,导致抛出Singleton not set for STATIC_INSTANCE异常。从栈追踪可以看到:JSF在初始化ClientWindowFactoryImpl时需要创建Application实例,OmniFaces的OmniApplication会尝试通过CDI.current()获取Weld容器,但此时Weld的Singleton实例还未初始化完成,最终引发连锁异常。

下面提供几种针对性的解决方案:


方案1:调整Listener初始化顺序,让Weld先于JSF启动

在Spring Boot中,我们可以手动注册Weld的初始化Listener,并设置它的优先级高于JSF的ConfigureListener,确保CDI容器在OmniFaces访问前就已就绪。

创建一个Spring配置类:

import org.jboss.weld.environment.servlet.listener.WeldInitialListener;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;

@Configuration
public class WeldInitializerConfig {

    @Bean
    public ServletListenerRegistrationBean<WeldInitialListener> weldInitialListener() {
        ServletListenerRegistrationBean<WeldInitialListener> registrationBean = new ServletListenerRegistrationBean<>();
        registrationBean.setListener(new WeldInitialListener());
        // 设置最高优先级,保证Weld先完成初始化
        registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return registrationBean;
    }
}

方案2:升级OmniFaces版本

OmniFaces 2.6.x虽然兼容CDI 2.0,但后续的2.x版本(如2.14.0)针对Spring Boot+Weld的场景做了初始化逻辑优化,可能直接解决这个顺序问题。

修改POM中的OmniFaces依赖:

<dependency>
    <groupId>org.omnifaces</groupId>
    <artifactId>omnifaces</artifactId>
    <version>2.14.0</version> <!-- 兼容JSF 2.2的最新2.x版本 -->
</dependency>

方案3:使用JoinFaces官方的Weld集成 starter

你当前手动引入weld-servlet-shaded,而JoinFaces提供了专门的Weld集成starter,它会自动处理CDI容器与JSF的初始化顺序,无需手动配置Listener。

  1. 移除POM中手动添加的weld-servlet-shaded依赖
  2. 加入JoinFaces的Weld starter:
<dependency>
    <groupId>org.joinfaces</groupId>
    <artifactId>weld-spring-boot-starter</artifactId>
</dependency>

验证步骤

  1. 执行mvn clean install清理并重新构建项目
  2. 启动Spring Boot应用,检查是否还存在ClientWindowFactory相关异常
  3. 验证JSF页面、Jersey接口以及OmniFaces的功能是否正常运行

内容的提问来源于stack exchange,提问作者Josep M Beleta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:25:11