【问题标题】:Defining Reusable CDI beans in same container在同一个容器中定义可重用的 CDI bean
【发布时间】:2014-01-21 09:08:25
【问题描述】:

我有几个 CDI bean 控制器,我想在我的桌面 Web 应用程序和移动 Web 应用程序(这里称为 Web 组件)中重用它们。

场景:

我有一个 Java EE 应用程序 (EAR)

  • 我有一个 web.war 组件(指桌面 Web 应用程序)
  • 我有一个 mobile.war 组件(指移动 Web 应用程序)

我不想在主 Web 应用程序上使用响应式设计,因为它的设计方式,所以我只需要开发一个移动版本,以便在不同的子域访问

 m.mydomain.com

我的意图是创建 reusable-component.jar 以包含所有 CDI 控制器,然后将此 JAR 包含到 Web 组件中。

但是,这会失败 Jboss weld 检测到 bean 的同名 weld error 00414

但是,我已经在这个 CDI bean 上定义了一些通用的请求处理生命周期,例如

@OnRequest()
@Named
@RequestScope
public class MyBeanController{
}

@OnRequest 是我定义的生命周期回调,它做了很多事情,包括对在配置文件中外部定义的某些资源的权限。

我的想法。

删除reusable-component.jar中的@Named和范围注解,然后在不同的web组件上分别扩展。

问题,我有几个 cdi bean,相当多,因为这是一个巨大的应用程序,并且在 web 组件中扩展它们中的每一个都需要大量的重构。

我的问题:

如何在这个 web 组件中重用这个 CDI bean?

仅供参考:我已经查看了替代/刻板印象,专业化场景,这仍然需要我扩展所有 bean,并且我的 @OnRequest 注释生命周期处理使用 @Named 或 bean 名称进行 bean 查找(如 cdi 中指定的那样),所以如果我要使用专业化或替代方法,此查找将受到什么影响?

【问题讨论】:

  • EAR 中基于 CDI 的共享库,带有多个 WAR = 恐怖。相关博客:balusc.blogspot.nl/2013/10/…
  • @BalusC 那么,在这种情况下,您会建议什么选项?在不同的 Web 组件中实施不同的替代方案会起作用吗?

标签: java jsf jboss7.x java-ee-6 cdi


【解决方案1】:

在这种情况下,我向大多数人推荐的是定义两个单独的 WAR 和一个公共 JAR。在两个 WAR 中包含该公共 JAR(作为 WEB-INF/lib 条目)。当 JAR 被复制时,代码不会被复制。

【讨论】:

  • 呃,OP 已经在这样做了。还是您的意思是两个没有 EAR 的独立 WAR?
  • 看起来 OP 正在使用 EAR。
猜你喜欢
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 2011-05-31
  • 2023-01-26
  • 2015-04-20
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多