Tag: 工作单元

DDD(java)聚合根和持久性

我正在创建一个应用程序,它将使用各种大小的表格,而我已经开发了一个标记为DDD的项目,之后它没有真正使持久性部分正确,因此我还在研究事物。 我没有完全掌握并且似乎无法找到具体例子的一件事是如何坚持聚集根的“孩子”。 我工作时没有ORM(只是普通的老DAO)很难找到的例子(这实际上是针对uni的项目,这是db特定的所以我’不允许’使用ORM,而我很欣赏这简直太容易了。 我已经四处查看了stackoverflow的具体示例,但似乎没有什么能够描述我的特定问题。 我怀疑下面的代码是对的 public DataTable getTableByID(int id) throws AccessException{ DataTable result = this.context.TableContext().getEntityByID(id); result.setColumns(getColumnsByTableID(id)); return result; } private List getColumnsByTableID(int id){ Object[] arguments = { id }; return this.context.ColumnContext().getUnitsWhere(“TABLE_ID = ?”, arguments); } 如您所见,每次检索表实体时都会设置columns集合,如果表已经在内存中,这显然会丢弃已添加到集合中或从集合中删除的任何列。 我不确定我应该在哪里或如何检索列(我已经考虑过从表类中调用存储库但是对此感觉不舒服)。 说到持久性,我也不完全确定如何去做,当我将对象添加到列表中时我可以很容易地检索它们但是当我删除它们时我真的没有办法检测(因为我是确保把事件赶上来这将是作弊:))。 非常感谢,向正确的方向推进一点点,谢谢。

单线程处理任务而不排队进一步的请求

我要求异步执行任务,同时丢弃任何进一步的请求,直到任务完成。 同步方法只是将任务排队,不会跳过。 我最初想过使用SingleThreadExecutor,但也会排队任务。 然后我查看了ThreadPoolExecutor,但是它读取队列以获取要执行的任务,因此将执行一个任务并且至少有一个任务排队(其他任务可以使用ThreadPoolExecutor.DiscardPolicy丢弃)。 我唯一能想到的是使用信号量来阻止队列。 我来自以下示例来展示我正在努力实现的目标。 有更简单的方法吗? 我错过了一些明显的东西吗 import java.util.concurrent.*; public class ThreadPoolTester { private static ExecutorService executor = Executors.newSingleThreadExecutor(); private static Semaphore processEntry = new Semaphore(1); public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 20; i++) { kickOffEntry(i); Thread.sleep(200); } executor.shutdown(); } private static void kickOffEntry(final int […]