適切にテストのために組み込まれたのOpenEJBコンテナーを構成する方法?

StackOverflow https://stackoverflow.com/questions/4042232

質問

これは私の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プロジェクトだ。

役に立ちましたか?

解決

私はあなたのOpenEJB設定のためjndi.propertiessrc/test/resourcesという名前のファイルを置くことを示唆しています。そして、これはあなたがデータソースとEJBをルックアップするためのInitialContextの引数なしのコンストラクタを使用することができ、テストクラスパスで利用できるようになります。このような構成例のルックスは、私は私のデータソース用の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のconfigure永続ユニットのプロパティへの可能性:

abc.hibernate.hbm2ddl.auto=update
abc.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
私は別のデータベース名で、テスト、通常の実行の両方のためのMySQLを使用していますので、

私はこれを自分でテストしていません。この作品は、私はあまりにも私のテストケースでMySQLを置き換えることについて考えをしてきた場合は私に知らせてくださいます。

scroll top