2016-03-01 117 views
1

仅问题关于CDI bean,而不是EJB。从父模块到子模块的CDI注入bean

是不是很好的做法来开发你需要从父模块向子模块注入bean的体系结构?

比如我有三个模块:

  1. 共同 - 在这里,我需要使用一些环境设置,但共同不知道在哪个环境下它会被执行,客户端或服务器(在我的情况下,它被封装在一个ear/lib目录中,并分别由java se客户端测试);
  2. 客户 - 在这里我可以提供设置从属性文件,例如(用于测试目的,它不是在耳包装)
  3. 服务器 - 在这里我可以提供从EJB的配置文件设置(它是一个EJB模块与普通耳朵相同)。

所以客户取决于共同服务器上取决于共同(它们从共同延伸,并且使用类),但注射进去方向相反。所以@Inject注入点存在于常见的模块中,但生产者方法在客户端服务器

除了哲学方面,我有一个真正的问题。我可以进一步将bean从ejb.jar注入到ear/lib/*。jar中,否则类路径问题将不可能发生?

问候

+0

介意用[mcve](http://stackoverflow.com/help/mcve)更新您的文章? – aribeiro

+0

它是最小和完整的问题 – lexluthor

+0

事实上,只是关于“...注入反向...”。你是否从服务器/客户端共同注入组件?这就是这个例子的必要性。 – aribeiro

回答

0

你没有提到你的安装部署,所以我只能猜测,在客户端和服务器共同不在同一EAR单独包装? 另外我不明白你的意思是父母和孩子,除非你直接将公共内容复制到你的模块中,或者你的模块扩展了公共类。
拥有循环依赖不是一个好习惯,它使测试变得困难并且紧密地耦合你的代码。 Common不应该依赖另一个模块中的bean来运行。

您可以注入accross模块,但必须在meta-inf中定义自己的beans.xml。

+0

client.jar仅用于测试目的,而且根本没有打包。 common.jar是ear/lib目录下的一个lib,server.jar是一个ejb模块。我对跨平台解决方案感兴趣,所以我没有提到具体的应用服务器。 – lexluthor

+0

无论如何,你的回答是非常有帮助的 – lexluthor

+0

虽然EAR/lib目录中的jar被认为是用于类加载目的的单个“模块”,但其他模块(web,EJB等)中的类通常无法访问。只有反面是真的。即。其他EAR模块中的类可以看到EAR/lib目录中的类。 –