java - 在同一容器中定义可重用的 CDI bean

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

我有几个 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/

相关文章:

java - JBoss AS 7 是否启用了 AOP?

java - JDOM 到对象列表

java - 在使用 maven clean 包创建的 jar 中获取 pom 文件

java - 排除模块在 JBoss 7.2.1 中不起作用

jsf - 从独立部署的 war 中访问 jar 中的 EJB3 bean(未打包在 ear 中)

eclipse - 使用 Tomcat 部署 JSF 应用程序所需的最小 JSF jar 是什么

hibernate - javax.persistence.PersistenceException : Invalid persistence. xml

java - 非启动 Spring 项目的 Spring Boot BOM

java - 为什么 Sun Java 中的 HashSet 实现使用 HashMap 作为其后盾?

java - 如何重新加载 JSF 使用的 ResourceBundle?