我们有一个maven多模块项目,其中包含以下模块:
prj-srv
prj客户端
srv项目包含EJB。在prj-srv / src / test中,我们具有EJB的@Alternative实现,在bean.xml的Alternatives部分中指定。这可行。
项目prj-client具有prj-srv作为依赖项。此外,它还依赖于test-jar类型,范围测试的prj-srv,因此它可以使用替代的EJB实现进行测试。这也可以。
现在,在prj-client / src / main / java中,我们用限定符@Cacheable注释了EJB接口的本地实现(以便我们可以缓存数据)。我想做的是在prj-client / src / test / java中设置测试,以便它们使用prj-srv中的测试实现(这些实现不可缓存,但谁在乎,因为它是用于测试的)。
我试过了:
在prj-client / src / test / java中使用生产者方法(@Produces @Alternative @Cacheable)创建类,但是我不知道如何配置beans.xml来将其设置为替代方法
在prj-srv / src / test / java中创建扩展测试EJB的类,将其注释为@Alternative @Cacheable,然后将它们放在src / test / resources / META-INF / beans.xml中的Alternatives部分中,但焊接仍会注入来自src / main / java的“真实” @Cacheable bean。
将@Alternative与限定符混合是否存在问题?如何获得测试以使用合格类的替代实现?
最佳答案
刚刚发现:我忘了用@Inject标记@Cacheable实现的构造函数。显然,即使在bean.xml中将其标记为替代方法,由于Weld不知道如何初始化它,而不是抛出错误,它只是默默地决定忽略替代方法...