【问题标题】:How to override/disable Java EE interceptors?如何覆盖/禁用 Java EE 拦截器?
【发布时间】:2016-04-08 16:49:22
【问题描述】:

我们有几个拦截器在需要时很好用,但在测试时它们是皮塔(arquillian),因为许多测试场景根本不想测试拦截器,而是其他代码。所以我想在拦截器被覆盖/禁用的情况下运行测试,以便让测试专注于应该在测试中测试的内容,而不是所有的绒毛。

我不想碰现有的拦截器,但如果没有其他方法我有可能。

【问题讨论】:

  • 显示您的beans.xml
  • @CássioMazzochiMolin 我们正在使用带注释的 bean-discovery-mode,因此 beans.xml 不适用于这种情况。
  • 你可以有一个beans.xml 来进行测试,而不需要bean-discovery-mode
  • @CássioMazzochiMolin,我添加了一个,但我还需要其他东西,比如要注入的 TransactionManager 和 EntityManager。我尝试添加 beans.xml,但我只是丢失了所有其他依赖项。现在我想我会重写拦截器来检查上下文中的测试变量,如果测试变量在那里,拦截器就不会做它的工作。
  • 如何控制TransactionManagerEntityManager的注入?您是否考虑将此设置复制到您的测试配置中?

标签: jakarta-ee interceptor


【解决方案1】:

我过去的做法是使用单独的 beans.xml 文件进行测试和实际应用。然后,只需相应地修改类路径。

但是,如果您使用带注释的 bean-discovery-mode,因此未在 beans.xml 中指定拦截器,则此解决方案将不起作用。

【讨论】:

  • 如何编写 beans.xml 以替换(?)拦截器?我试图将 beans.xml 放入 arquillian-war 中,但丢失了 TransactionScope 和 EntityManager 注入,所以我最终陷入了更糟糕的境地,但我想我做错了......
  • 这就是问题所在。如果您的拦截器最初是通过 beans.xml 注册的,那么您可能刚刚切换 bean.xml 以禁用它。但是,据我所知,您的拦截器是通过注释或您无法访问的某些 bean.xml 注册的。在这种情况下,我不确定您是如何禁用它的,以及是否有可能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多