0

我们正在使用AbstractOpenEJBTestNGclass 和 openEJB 来加载类。许多类都使用以下语句加载:

ejbJar.addEnterpriseBean(new StatelessBean(MyService.class));

但我也看到@EJB类顶部的注释。我的理解是,要在 openEJB 容器中加载 EJB,我们需要使用上述语句。但我不确定我们是否也可以使用@EJB 注释。所以我们可以他们中的任何一个?或者每种方法的任何特定用例?

谢谢!

4

1 回答 1

0

不确定我是否正确理解了您的担忧,但是要使用 EJB 执行集成测试,您需要两件事:
1. 首先,您需要让 OpenEJB 了解它可以在即将进行的测试中提供的任何 EJB。这就是该ejbJar.addEnterpriseBean(new StatelessBean(MyService.class)); 部分的用途。
2. 其次,您直接指定测试使用的所有 EJB 注入,方式与在普通代码中所做的方式相同。请记住,如果您在测试中调用的 EJB 依赖于任何其他 EJB,则需要使用该.addEnterpriseBean()方法指定所有这些 EJB。例子:

public class SomeProcessingServiceIntegrationTest extends AbstractOpenEJBTestNG {

@EJB
SomeProcessingServiceLocal processingService;

@Module
public EjbModule beans() {

    EjbJar ejbJar = new EjbJar("processing");
    OpenejbJar openejbJar = new OpenejbJar();

    ejbJar.addEnterpriseBean(new StatelessBean(SomeProcessingService.class));
    ejbJar.addEnterpriseBean(new StatelessBean(DatabaseLookupService.class));
}
@Test
public void testProcessingService(){
     // Should return true for example
     assertTrue(processingService.process());
}
}

@Stateless
@Local(SomeProcessingServiceLocal.class)
public class SomeProcessingService {

@EJB
DatabaseLookupServiceLocal databaseLookupService;

    public boolean process(){
         return databaseLookupService.existsInDB();
    }
}
于 2013-06-23T20:24:59.167 回答