我正在基于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
接口的包装器,它将执行以下操作:
初始化:
spareQuery = entityManager.createQuery("SELECT s FROM Spares s ORDER BY s.id");
spareQuery = new MyQueryWrapper ( spareQuery );
主要部分!之后,这称为:
spareList = org.jdesktop.observablecollections.ObservableCollections.
observableList(spareQuery.getResultList());
Query
实例应该将查询拆分为块,而不是等待从服务器收到的所有数据,而是在检索到的每个块之后将数据添加到列表中(因为列表是可观察的,所以每个数据部分都将显示在关联的{ {1}})。因此,我们将拥有软启动和快速启动。
因此,工作逻辑应该是这样的:
JTable
SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 1 and 20
问题:是否有任何库可以替换(换行)SELECT s FROM Spares s ORDER BY s.id WHERE s.id BETWEEN 80 and 100
,EntityManager
或其他什么来使用EJB3技术从数据库中获取软异步数据?
答案 0 :(得分:1)
为什么你需要一个库。只需在另一个线程中启动您的EntityManager实例和Query执行,然后在返回值可用时将其返回给Swing的线程。您可以使用Swing Worker或ExecutorService来实现此功能,但是对于这样一个简单的任务,您最好只需使用回调启动一个线程。