java - EJB 3 和 Swing : how to improve GUI responsiveness?

标签 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 接口(interface)的包装器,它将执行以下操作:

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

Query 实例不应等待从服务器接收到的所有数据,而是应将查询拆分为多个 block ,并在检索到每个 block 后将数据添加到列表中(由于列表是可观察的,数据的每个部分都将出现在关联的 JTable 中)。因此,我们将实现软且快速的启动。

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

  1. 从备件中选择 s ORDER BY s.id WHERE s.id BETWEEN 1 和 20
  2. 将数据添加到列表中。
  3. ...
  4. 从备件中选择 s ORDER BY s.id,其中 s.id 介于 80 和 100 之间
  5. 将数据添加到列表中。

问题:是否有任何库可以替代(包装)EntityManagerQuery 或其他库来使用 EJB3 技术从数据库实现软异步数据获取?

最佳答案

为什么你需要一个库呢?只需在另一个线程中启动 EntityManager 实例和查询执行,然后在返回值可用时将其返回到 Swing 线程。您可以使用 Swing WorkerExecutorService要实现这一点,但对于这样一个简单的任务,您最好只启动一个带有回调的线程。

关于java - EJB 3 和 Swing : how to improve GUI responsiveness?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583167/

相关文章:

java - 用 Java 制作标签创建器

java - @Resource 没有在 jboss 7 中注入(inject) SessionContext

java - EJB 的类加载器问题

java - EJB + JSP : Cannot create the Remote Object from the Home interface

java - 向消费者提供队列中的消息,延迟 :Weblogic

java - 在 Android 中选中单选按钮时,如何取消选中单选组中的所有单选按钮?

java - 框架没有显示任何内容,也没有显示任何错误

java - ListSelectionModel.insertIndexInterval() 究竟在做什么?

java - 如何使环境变量在JAR文件中起作用?

java - 错误 : Java heap space