【问题标题】:How to call the startup bean at the end of the bean initialization chain in SEAM如何在 SEAM 中调用 bean 初始化链末端的启动 bean
【发布时间】:2011-09-21 01:14:40
【问题描述】:
14:00:04,449 INFO  [org.jboss.seam.servlet.SeamFilter] Initializing filter:
 org.jboss.seam.servlet.characterEncodingFilter
14:00:04,450 INFO  [org.jboss.seam.servlet.SeamFilter] Initializing filter:
 org.jboss.seam.web.redirectFilter
14:00:04,451 INFO  [org.jboss.seam.servlet.SeamFilter] Initializing filter:
 org.jboss.seam.web.exceptionFilter
14:00:04,452 INFO  [org.jboss.seam.servlet.SeamFilter] Initializing filter:
 org.jboss.seam.web.multipartFilter
14:00:04,452 INFO  [org.jboss.seam.servlet.SeamFilter] Initializing filter:
 org.jboss.seam.web.identityFilter
14:00:04,453 INFO  [org.jboss.seam.servlet.SeamFilter] Initializing filter:
 org.jboss.seam.web.rewriteFilter

这些是在 JBoss 6 上 JBoss SEAM 应用程序启动后打印的最后一组行。

@Name("myStartup")
@Startup
@Scope(APPLICATION)
@BypassInterceptors
public class MyStartup {

    @Create
    public void create() {
        System.out.println("SERVER STARTED SUCCESSFULLY");
    }
}

我的意图是在 SeamFilter 初始化后打印上述消息(在 JBoss 6 控制台上)。我该怎么做?

【问题讨论】:

    标签: jboss seam jboss6.x seam2


    【解决方案1】:

    您可以在普通组件上尝试此注解。移除该组件上的@Startup

    @Observer({"org.jboss.seam.postInitialization", "org.jboss.seam.postReInitialization"})
    public void create() {
        System.out.println("SERVER STARTED SUCCESSFULLY");
    }
    

    【讨论】:

    • 上述建议似乎不起作用。有没有办法使用带有优先选项的@Instal 注释?我不知道如何让它发挥作用。
    • 上述建议产生与之前类似的输出,并且在 Servlet 过滤器初始化后,上述行不会被打印。
    • 我查看了代码 public static void endReinitialization() { Contexts.startup(ScopeType.APPLICATION); Events.instance().raiseEvent("org.jboss.seam.postReInitialization");你的建议似乎是正确的,但由于某种原因没有奏效。
    • 您使用的是哪个版本的 seam?您应该使用最新版本,因为它支持 JBoss 6
    • 如果这不起作用,请尝试删除 @Startup 组件中的 @BypassInterceptors
    【解决方案2】:

    如果这个想法只是在所有接缝消息之后显示一些状态,至少有两种方式:

    首先是使用 Shervin 的解决方案并抑制 $JBOSS_HOME/server/<your-profile>/conf/jboss-log4j.xml 中的 org.jboss.seam.servlet.Filter INFO 消息:

    <category name="org.jboss.seam.servlet.Filter">
       <priority value="ERROR"/>
    </category>
    

    或者实现一个过滤器:

    @Scope(APPLICATION)
    @Name("com.example.seam.myFilter")
    @BypassInterceptors
    @Filter(within={"org.jboss.seam.web.rewriteFilter"})
    public class MyFilter implements Filter {
        public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
            chain.doFilter(request, response);
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("SERVER STARTED SUCCESSFULLY");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2011-01-23
      • 2012-02-26
      • 2016-07-22
      • 2013-09-25
      • 1970-01-01
      • 2010-11-08
      相关资源
      最近更新 更多