2012-03-06 9 views
1

私はEJB 3技術に基づいてSwingデータベースアプリケーションを作っています。私はNetbeans 7.0.1を使用しています。プログラムは、データベースからすべてのデータをフェッチしています起動した場合:データベースからすべてのデータをフェッチEJB 3&Swing:GUIの応答性を向上させる方法

private javax.persistence.Query spareQuery; 
    private java.util.List<Spares> spareList; 
    ... 
    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id"); 
    spareList = org.jdesktop.observablecollections.ObservableCollections. 
       observableList(spareQuery.getResultList()); 

は、起動プロセスで重要なの一時停止になります。

  1. 初期化::

    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id"); 
    spareQuery = new MyQueryWrapper (spareQuery); 
    
  2. 主要部分 は今のところ、私は、次の操作を行いますjavax.persistence.Queryインターフェースのラッパーを必要とします!これが呼び出されたときにその後:リストが観測されるよう

    spareList = org.jdesktop.observablecollections.ObservableCollections. 
          observableList(spareQuery.getResultList()); 
    

代わりに、すべてのデータをサーバから受信し、Queryインスタンスはチャンクにクエリを分割する必要があり、すべてのチャンクを取得した後に待っているが、(リストにデータを追加しますデータのすべての部分が関連付けられたJTableに表示されます)。結果として、我々はソフトで迅速な立ち上げを行うでしょう。

これにより、作業のロジックは次のようにする必要があります:

  1. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 1 and 20
  2. は、リストにデータを追加します。
  3. ...
  4. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 80 and 100
  5. は、リストにデータを追加します。

QUESTION:EJB3技術を使用して、データベースからのフェッチソフト非同期データを達成するために(ラップ)EntityManagerQueryまたは何か他のものに置き換えることができます任意のライブラリはありますか?

答えて

1

なぜライブラリが必要ですか? EntityManagerインスタンスとクエリの実行を別のスレッドで開始してから、戻り値を利用可能になったらSwingのスレッドに戻してください。これを実装するにはSwing WorkerまたはExecutorServiceを使用することができますが、このような簡単な作業の場合は、コールバックでスレッドを開始する方がよい場合があります。

+0

私は 'SwingWorker'について知っていますが、これは現在私のリストの中で第1の解決策です。 しかし私の質問は、この記事で説明されている方法で物事を進める図書館があるかどうかです。 – Exterminator13

関連する問題