2

この質問のために、私は 2 つのビジネス クラスを用意しています。

@Entity
@Indexed
public class MyClassOne implements MyInterface {

    @Id
    private Integer id;

    @OneToMany(orphanRemoval = true)
    @Cascade(CascadeType.ALL)
    private List<MyClassTwo> myClassTwos;

    @Field
    private String someField;
}

@Entity
@Indexed
public class MyClassTwo implements MyInterface {

    @Id
    private Integer id;

    @Field
    private String someField;
}

次に、次のコードを使用してインデックスを作成します (Hibernate Search ドキュメントで提案されているように)。

Search.getFullTextSession(session).createIndexer(MyClassOne.class, MyClassTwo.class).startAndWait();

問題は、これがフリーズすることです。MassIndexer.createIndexer() が無期限にハングし、どこにも行きません。

Class 引数のいずれかを削除すると、残りのクラスにインデックスが付けられ、すべてが完全に機能します。2 つのエンティティに同時にインデックスを付けようとすると問題になります。私の理解では、休止状態はデフォルトでエンティティごとに個別のインデックスを作成します。これを変更するための構成は行っていません。

わかりやすくするために、@AnalyzerDef、@Boost アノテーション、および @Field と @Indexed アノテーション パラメータを削除しましたが、これらを削除しても根本的な問題に違いはありません。両方のクラスが同じインターフェイスを実装し、関連する場合に備えて、一方のクラスには他方のリストが含まれているという事実を残しました (ただし、これは @IndexEmbedded ではないことに注意してください)。

(また、スレッドプールサイズが問題であることを示唆するスレッドを見つけたので、50に増やしましたが、うまくいきませんでした)

おそらく私は何か明らかに間違ったことをしているのですが、アイデアがありません - 誰か助けてもらえますか?

ありがとう

4

2 に答える 2

1

It might seem to freeze when it runs out of database connections; it effectively deadlocks relying on connection timeout from the database pool library to "get free".

Instead of increasing the thread pool, you should lower it so as not to exhaust your connections; each thread is going to use one. Alternatively, if you can it's more effective to raise the maximum amount of allowed connections to the database.

I've opened a JIRA issue to address this by detecting it somehow, worst case document it better.

于 2012-10-03T23:07:33.060 に答える