5

これは私の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を使用したいと思います。"abc"テスト中に永続ユニットがHSQLを指す必要があることをOpenEJBに指示するにはどうすればよいですか?新しいバージョンを作成しpersistence.xmlませんか?使いましょopenejb.xmlうか?私は彼らの例とドキュメントで迷子になっています..:(

これはMaven-3プロジェクトです。

4

1 に答える 1

6

OpenEJB構成用にという名前jndi.propertiesのファイルを配置することをお勧めします。src/test/resourcesこれはテストクラスパスで利用可能になり、InitialContextの引数なしのコンストラクターを使用してデータソースとejbsを検索できます。構成例は次のようになります。データソースに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を置き換えることを考えています。

于 2010-10-28T13:52:44.860 に答える