0

arquillianテストケースを介してdb4oでエンティティを保存しようとしていますが、DatabaseClosedExceptionが発生しています。


テストセット:com.walterjwhite.address.api.datastore.TestAddressDatastore

テストの実行:1、失敗:0、エラー:1、スキップ:0、経過時間:2.149秒<<<失敗!test_save(com.walterjwhite.address.api.datastore.TestAddressDatastore)経過時間:0.68秒<<<エラー!com.db4o.internal.ObjectContainerBase.checkTransaction(ObjectContainerBase.java:331)atcom.db4o.internal.ObjectContainerBaseのcom.db4o.internal.ObjectContainerBase.checkClosed(ObjectContainerBase.java:303)のcom.db4o.ext.DatabaseClosedException。 asTopLevelStore(ObjectContainerBase.java:412)at com.db4o.internal.ObjectContainerBase.storeInternal(ObjectContainerBase.java:1602)at com.db4o.internal.ObjectContainerBase.store(ObjectContainerBase.java:1584)at com.db4o.internal.ObjectContainerBase .store(ObjectContainerBase.java:1576)at com.db4o.internal.ObjectContainerSession.store(ObjectContainerSession.java:

@Produces
protected ObjectServer openServer(ApplicationContext applicationContext)
{
    return (Db4oClientServer.openServer("/tmp/test.db4o", 0));
}

@Produces
public ObjectContainer getObjectContainer(ObjectServer objectServer)
{
    return (objectServer.openClient());
}

私のテストケースでは、/tmp内のファイルを使用してオブジェクトサーバーを作成しています。ファイルが作成され、オブジェクトコンテナがセッターを介して自動的に挿入されます。そうでない場合、objectContainerはnullになり、これは別の例外になります。

コードにデバッグステートメントをいくつか入れて、ストアの呼び出しが完了するまでdisposeメソッドが呼び出されないようにして、潜在的な問題を除外できるようにしました。

コンテナを準備するために他に何をする必要がありますか?

ありがとう、

ウォルター

4

3 に答える 3

1

ファイル test.db4o が tmp に作成されていますか? データベースを書き込むディレクトリが存在し、それを作成しようとするプロセスにアクセスできることを確認してください。

于 2011-06-21T09:14:32.163 に答える
0

これが過去に私に起こったとき、この例外がスローされる前に、以前のエラーがデータベースを閉じました。私の提案は、これがスローされる前に他のエラーを探すことです。

于 2011-06-21T05:59:43.753 に答える
0

私はそれを理解しました...ビーンに指定された正しいスコープがありませんでした... Weld / CDIなしで簡単なテストアプリケーションを書きましたが、うまくいきました。ObjectServer は、開いた直後に閉じられていました。

サーバーのシングルトンである適切なスコープに変更した後、機能しました。

ウォルター

于 2011-06-22T02:18:42.503 に答える