2014-12-03 5 views
1

Я создал веб-приложение, которое использует реализацию CDI Weld-2.2.0 и работает на Tomcat-7. Я создал перехватчик для вызова методов журнала. Но когда я запускаю приложение, он обходит метод перехватчика и звонков напрямую.Java-перехватчик Java CDI не работает с WELD

My перехватчиков конструктов, как показано ниже:

перехватчик Переплет:

@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 !"); 
    } 

} 

И, наконец, у меня есть гр reated 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> 

Я пробовал много optins в том числе с использованием приварной-поддержка кота баночки для интеграции, но ни один из них не кажется, работают.

Может ли кто-нибудь помочь мне здесь?

У меня пропало или что-то не так?

+0

Можете ли вы опубликовать «полный» web.xml? (полный заголовок XML и вся конфигурация, но не такие, как ваши собственные слушатели, сервлеты и т. д.) – Gimby

ответ

-1

Я не думаю, что перехватчики работают вне контейнера Java EE. Я думаю, что автономный Weld может делать только DI, но не другие функции. См. Также этот пост: Is it possible to use javax.interceptor in a Java SE environment?

+0

Вопрос, вероятно, в том, что он работает в среде Servlet 3.0 или нет, а не в среде JEE. Он ДОЛЖЕН работать в Tomcat 7+, но вам может понадобиться обновленная версия. Tomcat 7.0.50+ скорее всего. – Gimby

+0

Я думаю, что вы правы! –

+0

Вот что я сказал. Tomcat работает в среде Java SE и не является контейнером JEE. Поэтому, скорее всего, такие функции недоступны в Tomcat. Но если вы скажете, что Tomcat 7.0.50+ реализует эти функции, тогда он должен работать, да. – shillner

Смежные вопросы