EJB 3& Swing:如何提高GUI响应能力?

时间:2012-03-06 11:51:59

标签: java swing ejb

我正在基于EJB 3技术制作Swing数据库应用程序。我正在使用Netbeans 7.0.1。当程序启动时,它从数据库中获取所有数据:

    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());

从数据库中获取所有数据会导致启动过程中出现明显的暂停。 现在,我需要一个javax.persistence.Query接口的包装器,它将执行以下操作:

  1. 初始化:

    spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id");
    spareQuery = new MyQueryWrapper ( spareQuery );
    
  2. 主要部分!之后,这称为:

    spareList = org.jdesktop.observablecollections.ObservableCollections.
                observableList(spareQuery.getResultList());
    
  3. Query实例应该将查询拆分为块,而不是等待从服务器收到的所有数据,而是在检索到的每个块之后将数据添加到列表中(因为列表是可观察的,所以每个数据部分都将显示在关联的{ {1}})。因此,我们将拥有软启动和快速启动。

    因此,工作逻辑应该是这样的:

    1. JTable
    2. 将数据添加到列表中。
    3. ...
    4. SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 1 and 20
    5. 将数据添加到列表中。
    6. 问题:是否有任何库可以替换(换行)SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 80 and 100EntityManager或其他什么来使用EJB3技术从数据库中获取软异步数据?

1 个答案:

答案 0 :(得分:1)

为什么你需要一个库。只需在另一个线程中启动您的EntityManager实例和Query执行,然后在返回值可用时将其返回给Swing的线程。您可以使用Swing WorkerExecutorService来实现此功能,但是对于这样一个简单的任务,您最好只需使用回调启动一个线程。