我有几个 CDI bean Controller ,我想在我的桌面 Web 应用程序和移动 Web 应用程序(此处称为 Web 组件)中重用它们。
场景:
我有一个 Java EE 应用程序 (EAR)
- 我有一个 web.war 组件(指桌面 Web 应用程序)
- 我有一个 mobile.war 组件(指移动网络应用程序)
由于设计方式的原因,我不想在主 Web 应用程序上使用响应式设计,因此我只需要开发一个移动版本,以便在不同的子域中访问
m.mydomain.com
我的目的是创建 reusable-component.jar 来包含所有 CDI Controller ,然后将此 JAR 包含到 Web 组件中。
但是,Jboss焊接
检测到bean的同名失败,焊接错误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 名称(在 cdi 中指定),所以如果我要使用专门化或替代方案,此查找将如何受到影响?
最佳答案
在这种情况下,我向大多数人建议的是定义两个单独的 WAR 和一个公共(public) JAR。在两个 WAR 中包含该通用 JAR(作为 WEB-INF/lib 条目)。虽然 JAR 重复,但代码不重复。
关于java - 在同一容器中定义可重用的 CDI bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21253569/