2

私は、Oragle 10g データベースを使用する新しい Oracle ADF プロジェクトに取り組んでおり、プロジェクトで Unitils と DBMaintainer を使用しています。

  • データベース構造の更新
  • 単体テスト
  • シードデータを読み込む
  • テストデータを読み込む
  • リスト項目

私たちのプロジェクトには、2 つのスキーマと、これらのスキーマに接続する権限を持つ 2 人の db ユーザーがいます。私はそれらをインクリメンタルな名前のフォルダー構造に持っており、スクリプトの命名に @convention を使用しています。

001_@schemaA_name.sql 
002_@schemaB_name.sql 
003_@schemaA_name.sql 

これは、ant および DBMaintainer 更新タスクで正常に機能し、ant タスクの追加要素を構成して複数のユーザー名を提供します。

<target name="create" depends="users-drop, users-create" description="This tasks ... ">
    <updateDatabase scriptLocations="${dbscript.maintainer.dir}" autoCreateDbMaintainScriptsTable="true">
       <database name="${db.user.dans}" driverClassName="${driver}" userName="${db.user.dans}" password="${db.user.dans.pwd}" url="${db.url.full}" schemaNames="${db.user.dans}" />
        <database name="idp" driverClassName="${driver}" userName="${db.user.idp}"
            password="${db.user.idp.pwd}" url="${db.url.full}" schemaNames="${db.user.idp}" />
    </updateDatabase>
</target>

ただし、DBMaintainer 更新タスクで db スキーマから xsd スキーマを作成する方法がわかりません。

そのため、更新によって xsd スキーマが作成されるため、Unitils を使用することにしました。Unitils ant タスクの説明やドキュメントが見つかりませんでした。誰かヒントを教えてもらえますか? 当分の間、@Dataset アノテーションを使用して Junit テストを作成することで、Unitils を実行することを理解しました。1 つのスキーマと 1 つの db ユーザーで動作させることができます。しかし、複数のユーザーで機能させる方法がわかりませんか?

これが私が持っている unitils-local.properties セットアップです:

database.url=jdbc\:oracle\:thin\:@localhost\:1521\:vipu
database.schemaNames=a,b
database.userName=a
database.password=a1

Unitils を 2 番目のユーザー/スキーマで動作させる方法を教えてください。私はあなたの助けに非常に感謝しています!

4

4 に答える 4

3

最終的に、自分で Unitils をインスタンス化することで、任意の unitil.properties を注入する方法を見つけました!

次のようなことを実行する @BeforeClass を呼び出すメソッドが必要です。

@BeforeClass
public void initializeUnitils {
    Properties properties;
    ...
    // load properties file/values depending on various conditions
    ...
    Unitils unitils = new Unitils();
    unitils.init(properties);
    Unitils.setInstance( unitils );     
}

(@HibernateSessionFactory を介して) 読み込まれる休止状態の構成に応じてプロパティ ファイルを選択しますが、他のオプションも必要です。

于 2011-07-03T08:03:00.297 に答える
1

マルチデータベースユーザーのサポートで dbmaintain と unitils を連携させる方法を見つけましたが、解決策は純粋な ant ハックです。

  1. マルチデータベースユーザーサポートを使用して、dbmaintain の構成をセットアップしました。
  2. 置換用のトークン キーを含む unitils-local.properties ファイルを作成しました。
  3. 私のantスクリプトのinitターゲットは、ユーザー名/パスワード/スキーマのトークンをターゲット環境に適した値に置き換えることにより、新しい unitils-local.properties ファイルを生成し、それをユーザーのホームディレクトリにコピーします。
  4. テストをフォルダーに並べ替えました。フォルダーには、スキーマ名がプレフィックスとして付けられています
  5. unitils が呼び出されると、ant スクリプトによって作成されたばかりの unitils-local.properties ファイルが取得され、その魔法が実行されます。

きれいとはほど遠いですが、うまくいきます。

于 2011-05-31T13:40:09.103 に答える
0

私はライアンの提案に従いました。UnitilsDB をデバッグしたときに、いくつかの変更に気付きました。

以下は私の実行中の unitils-local.properties です:

database.names=db1,db2
database.driverClassName.db1=oracle.jdbc.driver.OracleDriver
database.url.db1=jdbc:oracle:thin:@db1d.company.com:123:db1d
database.userName.db1=user
database.password.db1=password
database.dialect.db1=oracle
database.schemaNames.db1=user_admin

database.driverClassName.db2=oracle.jdbc.driver.OracleDriver
database.url.db2=jdbc:oracle:thin:@db2s.company.com:456:db2s
database.userName.db2=user
database.password.db2=password
database.dialect.db2=oracle

@ConfigurationProperties(prefix = "database.db1") を使用して、テスト ケースの特定のデータベースに接続してください。

@RunWith(UnitilsJUnit4TestClassRunner.class)
@ConfigurationProperties(prefix = "database.db1")
@Transactional
@DataSet
public class MyDAOTest {

..

}
于 2018-02-15T16:07:55.140 に答える
0

このリンクをチェックしてください: http://www.dbmaintain.org/tutorial.html#From_Java_code

具体的には、次のようなことをする必要があるかもしれません:

databases.names=admin,user,read
database.driverClassName=oracle.jdbc.driver.OracleDriver
database.url=jdbc:oracle:thin://mydb:1521:MYDB
database.admin.username=admin
database.admin.password=adminpwd
database.admin.schemaNames=admin
database.user.userName=user
database.user.password=userpwd
database.user.schemaNames=user
database.read.userName=read
database.read.password=readpwd
database.read.schemaNames=read

また、このリンクが役立つ場合があります: http://www.dbmaintain.org/tutorial.html#Multi-database__user_support

于 2011-05-26T18:51:08.230 に答える