0

似乎我错过了一个基本概念,但即使经过数小时的阅读,我现在还是被卡住了。

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

接口的多种实现:

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 的实例

(我想避免引入“硬编码”特定限定符,因为它们只会用于测试。而且具体实现存在于他们自己的项目中并按客户打包,所以我也不能使用一个“枚举” ' 限定符。)

有任何想法吗?

4

1 回答 1

2

好吧,我自己搞定了。作为参考,这里是解决方案:

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

于 2013-11-12T09:22:08.177 回答