CDI:检索接口的具体实现

时间:2013-11-11 10:42:51

标签: java-ee cdi jboss-arquillian

似乎我错过了一个基本概念,但即使经过几个小时的阅读,我现在也不知所措。

给出以下设置: Arquillian的Glassfish 4上的EE7 (伪)代码:

接口的多种实现:

public interface Activity {
    public void doFoo();
}

@Stateless
public class StockActivity implements Activity {
    @Override
    public void doFoo(){
        ...
    }
}


@Stateless
public class OrderActivity implements Activity {
    @Override
    public void doFoo(){
        ...
    }

    public void doSomeOtherStuff(){
        ...
    }   
}

在商业代码中进行选择,例如

@Any
@Inject
Instance<Activity> activities;

到目前为止,一切正常......但现在我想在Arquillian-Test中调用doSomeOtherStuff方法,该方法未在接口上定义。我只是无法找到一种方法来检索OrderActivity Bean的实例

(我希望避免引入&#34;硬编码&#34;特定限定符,因为它们仅用于测试。此外,具体实现存在于他们自己的项目中并按客户打包,所以我也不能使用一个“enumifed&#39; Qualifier”。)

任何想法?

1 个答案:

答案 0 :(得分:2)

好吧,自己拿到了。作为参考,这是解决方案:

因为'Activity'是唯一实现的接口(并且不是java.io.Serializable / Externalizable或来自javax.ejb包),容器假定它是唯一的本地业务接口。要公开无界面视图,必须使用 @LocalBean

显式注释bean。