3

インターネットでは、このトピックに関する最近の反対の情報をよく見つけます...したがって、最小要件について質問したいと思います。

私の目標は、単純な EJB 3.1 アプリケーションの非常に単純な統合テストを行うことです。

  • EclipseLink を使用した単純な JPA 2.0 機能
  • テスト用の JUnit を使用した Arquillian
  • メイヴン
  • Derby DB (メモリー内または ./target 内のファイル内)、JTA パーシスタンス コンテキスト。
  • Arquillian に組み込まれた Glassfish

だから私は単純なJPAテストをしたいだけです。Glassfish を Arquillian で実行していますが、JPA を実行すると、アプリは常に Derby DB の処理に失敗します (テーブルなどがないことを教えてくれます) が、DDL ファイルは正常に見えます。persistence.xml でスキーマ名、ユーザーなどを指定して遊んでみましたが、何も役に立ちません。埋め込み Glassfish が私の persistence.xml と一致するように、または arquillian.xml を適応させるために、最小限の domain.xml を変更することについての投稿に出くわすことがあります。

私の質問は次のとおりです。この最小限のアプローチについて、本当に src/test/glassfish/domains/domain1/domain.xml または arquillian.xml が必要ですか?

しばらく前に、Embedded Glassfish を使用してこれを行うことができましたが、Hibernate 4 を JPA プロバイダーとして使用していると確信しています。私はもはやプロジェクトにアクセスできないため、domain.xmlなどを明確に追加しなかったことを除いて、違いを見分けることはできません。(他の質問はこちら)のような投稿は本当に混乱します。

重要なのは、管理対象サーバーではなく組み込みサーバーを使用していることです。

ありがとう、ティモ

これは私のバージョンの 1 つです。次のコメントを参照してください。

<persistence-unit name="localiser-core" transaction-type="JTA">
    <jta-data-source>jdbc/__default</jta-data-source>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
        <property name="javax.persistence.jdbc.url"
                  value="jdbc:derby:memory:test;create=true" />
        <property name="javax.persistence.jdbc.user" value="" />
        <property name="javax.persistence.jdbc.password" value="" />

        <property name="eclipselink.target-database" value="Derby"/>
        <property name="eclipselink.ddl-generation.output-mode"
                  value="database" />

        <property name="eclipselink.ddl-generation" value="create-tables" />
        <property name="eclipselink.application-location" value="target" />
        <property name="eclipselink.create-ddl-jdbc-file-name" value="create.sql"/>
        <property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql"/> 
        <property name="eclipselink.debug" value="ALL"/>
        <property name="eclipselink.weaving" value="static"/>
        <property name="eclipselink.logging.level" value="FINEST"/>
        <property name="eclipselink.logging.level.sql" value="FINEST"/>
        <property name="eclipselink.logging.level.cache" value="FINEST"/>

    </properties>

</persistence-unit>
4

1 に答える 1

1

接続 URL は jdbc:derby:memory:test;create=true であるため、Derby に伝えたのは、Derby が開始された場所の現在の作業ディレクトリに関連する「test」フォルダー内のデータベースに接続することです。そのデータベース「test」が現在の作業ディレクトリに存在しない場合は、最初から作成してください。

そのため、1 つの可能性として、アプリケーションの現在の作業ディレクトリが毎回異なるか、アプリケーションを実行するたびにアプリケーション内の別の何かが現在の作業ディレクトリをクリアしている可能性があります。

したがって、Derby はその場所で以前のデータベースを見つけられないため、新しく新しいデータベースを作成します。

これを回避する 1 つの方法は、jdbc:derby:memory:/users/timo/testdb などの接続 URL を使用して、データベースのより明示的な場所を指定することです。

次に、事前にデータベースを 1 回作成し、その後、アプリケーションは指定された場所でデータベースを検索して使用します。

于 2013-02-23T16:05:38.170 に答える