这是我的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的第三版):

<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?我失去了在他们的例子和文档 ..:(

这是一个Maven-3项目。

有帮助吗?

解决方案

我建议把一个文件名为jndi.propertiessrc/test/resources您OpenEJB的配置。那么这将是在测试类路径中,那么你可以使用的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中的参考,如果这是唯一的数据源,然后这应该工作即使这些名称是不同的。

修改持久性单元设置

按照文档,你引用的也应该是可以配置持久性单元的属性通过jndi.properties:

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

我没有这一点,因为我使用MySQL的两个测试和正常执行,只能用不同的数据库名称测试自己。请让我知道如果这个作品,我一直在左右我的测试用例更换MySQL的太思维。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top