簡體   English   中英

Java CDI攔截器無法與WELD一起使用Web應用程序

[英]Java CDI interceptor not working web application with WELD

我創建了一個使用Weld-2.2.0 CDI實現並在Tomcat-7上運行的Web應用程序。 我創建了一個攔截器來記錄方法調用。 但是,當我運行該應用程序時,它會繞過攔截器並直接調用方法。

我的攔截器構造如下:

攔截器綁定:

@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface LogMe{

}

攔截器類別:

@LogMe
@Interceptor
public class LogInterceptorImpl
{
    private static final Logger log = LogManager.getLogger(LogInterceptorImpl.class);      

    @AroundInvoke
    public Object intercept(InvocationContext ctx) throws Exception
    {
        log.debug("LogInterceptor::intercept");
        return ctx.proceed();
    }    
}

攔截目標:

@LogMe
public class DefaultAppController extends AbstractBaseController
{
    private static final long serialVersionUID = 1L;

    public DefaultAppController()
    {

    }

    @Override @LogMe
    public void processRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException
    {
        resp.getWriter().write("Hello, Guest !");
    }

}

最后,我創建了beans.xml文件,如下所示:

<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    <interceptors>
        <class>x.web.interceptors.LogInterceptorImpl</class>
    </interceptors>
</beans>

我還在context.xml文件和web.xml文件中創建了焊接資源參考(如焊接文檔所述)。

<Resource name="BeanManager" 
        auth="Container"
        type="javax.enterprise.inject.spi.BeanManager"
        factory="org.jboss.weld.resources.ManagerObjectFactory" />

<resource-env-ref>
        <resource-env-ref-name>BeanManager</resource-env-ref-name>
        <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
    </resource-env-ref>

我嘗試了很多選擇,包括使用weld-tomcat-support jar進行集成,但是似乎都沒有用。

有人可以幫我從這里出去嗎 ?

我在這里想念還是做錯了什么?

我不認為攔截器在Java EE容器之外工作。 我想獨立的Weld只能做DI,而不能做其他功能。 另請參見此文章: 是否可以在Java SE環境中使用javax.interceptor?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM