我想这很简单 - 但我找不到正确的搜索词组合来得到答案。如果我有一个多模块应用程序,我如何让模块A中的bean可用于模块B中的bean。
项目设置看起来有点像这样:
project.ear/module-a.jar/resources/beans.xml
project.ear/module-a.jar/java/foo/bar.class
project.ear/module-b.war/java/foo/barFactory.class
classespath或文件系统无法访问beans.xml。有没有办法做到这一点?或者我应该做些不同的事情吗?
答案 0 :(得分:3)
您的appserver可能会为您的EAR中的每个模块使用不同的类加载器,从而阻止一个模块查看另一个模块中的资源。这是JavaEE类加载器的默认行为。
您需要
答案 1 :(得分:1)
我认为有比上面提到的这3个skaffman更容易解决。
将这些行放入module-b.war / WEB-INF / web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/resources/beans.xml
</param-value>
</context-param>
这样就可以从任何类路径(即类路径上的任何jar)加载每个/resources/beans.xml,这对你来说已经足够了。
您应该将module-a.jar作为module-b.war的一部分加载(module-a.jar位于module-b.war / WEB-INF / lib位置)。
我的项目中的粒度非常相似:business-logic.jar及其bean的配置和frontend.war,它使用前一个配置的bean通过ref =“someBean”。它有效。