java - 如何正确配置嵌入式 OpenEJB 容器进行测试?

标签 java maven-2 ejb-3.0 maven-3 openejb

这是我的 SLSB:

@Stateless
public class MyService {
  PersistenceContext(unitName = "abc")
  EntityManager em;
  public boolean exists(int id) {
    return this.em.find(Employee.class, id) != null;
  }
}

这是我的 persistence.xml(我使用的是 Glassfish v3):

<persistence>
  <persistence-unit name="abc">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/MyDS</jta-data-source>
    <properties>
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.dialect"
          value="org.hibernate.dialect.MySQLInnoDBDialect" />
    </properties>
  </persistence-unit>
</persistence>

现在我正在尝试使用 OpenEJB 嵌入式容器创建一个测试。这是我的测试类:

class MyServiceText {
  @Test
  public void testChecksExistence() throws Exception {
    Properties properties = new Properties();
    properties.setProperty(
        javax.naming.Context.INITIAL_CONTEXT_FACTORY,
        "org.apache.openejb.client.LocalInitialContextFactory"
    );
    InitialContext ic = new InitialContext(properties);
    // actual testing skipped
  }
}

我想用HSQL做测试。我如何指示 OpenEJB 在测试期间我的持久性单元 "abc" 必须指向 HSQL?我应该创建一个新版本的 persistence.xml 吗?我应该使用 openejb.xml 吗?我迷失在他们的examples and documentation ..:(

这是一个 Maven-3 项目。

最佳答案

我建议在 src/test/resources 中为您的 OpenEJB 配置放置一个名为 jndi.properties 的文件。然后这将在测试类路径中可用,然后您可以使用 InitialContext 的无参数构造函数来查找数据源和 ejb。示例配置如下所示,我使用 mysql 作为我的数据源:

java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory

myDS=new://Resource?type=DataSource
myDS.JdbcDriver=com.mysql.jdbc.Driver
myDS.JdbcUrl=jdbc:mysql://127.0.0.1:3306/test
myDS.JtaManaged=true
myDS.DefaultAutoCommit=false
myDS.UserName=root
myDS.Password=root

OpenEJB 然后应该自动用这个数据源替换 persistence.xml 中的引用,如果这是唯一的数据源,那么即使名称不同,它也应该工作。

编辑:持久化单元设置

根据documentation you referenced还应该可以通过 jndi.properties 配置持久性单元属性:

abc.hibernate.hbm2ddl.auto=update
abc.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect

我自己没有测试过这个,因为我在测试和正常执行中都使用 mysql,只是使用了不同的数据库名称。请让我知道这是否有效,我一直在考虑在我的测试用例中替换 mysql。

关于java - 如何正确配置嵌入式 OpenEJB 容器进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042232/

相关文章:

linux - 构建过程因 maven 包而失败

java - 如何解决 java.lang.NoSuchMethodError

netbeans - 使用 Netbeans 和 Glassfish 的 J2EE 应用程序(未找到 [EntityType])

java - JEE6 拦截器 - 提取方法变量

Java "null"值从未分配给我的 Runnable

java - 如何混合使用 Guice 和 Jersey 注入(inject)?

unit-testing - 在哪里可以找到 EJB 和 J2EE 的良好单元测试资源?

java - JDBC 连接链接失败 - 如何进行故障转移?

java - 有没有办法将长时间运行的(例如压力测试)分开,这样它们就不会在 Maven 2 中默认运行?

java - Spring java配置EJB代理不工作