关于在(EJB 3.0)EJB 集成测试期间通过其原始 POJO API 使用 junit 注入替代数据源的快速问题。
我一直在将原始 POJO 服务转换为 EJB3 会话 bean。这样做实际上意味着直接注释 POJO。这些服务还伴随着现有的 junit 集成测试(检查查询真实测试数据库的方法的结果)。
其中一些服务需要直接的 java.sql.Connection,因此我打算通过注入的 DataSource 来配置它。这样做的目的是让我可以将 bean 直接部署到应用程序服务器(WLS,就像它发生的那样)。但是,我也希望现有的集成测试能够继续工作。这些测试针对他们自己的测试数据库运行,因此我需要能够在运行集成测试时注入测试配置(在 POJO/非容器环境中)。
问题是:
一旦我设置了我的 EJB,有没有办法在不操作容器的情况下覆盖注入的 bean?
换句话说,在运行原始 POJO 集成测试时是否没有直接的方法来注入新的 JNDI 配置?
示例服务类似于以下内容:
@Stateless(mappedName="MyInterface")
public class MyClassImpl implements MyInterface {
...
@Resource(name="jdbc/MyAppServerDataSourceJNDIName")
DataSource ds;
Connection conn;
...
}
注意我不打算将 DataSource 和 Connection 留在服务中,我只是想在有机地重构它之前得到一些合理的工作。
我正在考虑的解决方案:
- 我的一个(非常糟糕的)想法是只在包私有的服务中的 Connection 上提供一个设置器。这样,我的 junit 测试可以在执行之前设置连接。然后,在应用服务器环境中,将使用注入的 DS。虽然不漂亮。
- 我已经查看了 ejb3unit (BaseSessionBeanFixture) 并正在考虑这一点。
- 我也明白我可以在 junit 中创建一个 EJB 容器并在容器中运行。问题是,我想使用简单的 junit 测试并针对 POJO(而不是 EJB)来测试基本功能。
- 我知道这可以在春天完成(我有点 EJB 新手),并且正在考虑使用 spring 配置连接 EJB。
那里有很多信息,但没有具体信息(主要是 JPA)。不过,在其他地方有一些关于 SO 的好指针。
提前致谢。