From 645bc92d994dfb44806cb03aedd18452dd0bbc76 Mon Sep 17 00:00:00 2001 From: Jim Blake Date: Fri, 24 Oct 2014 10:28:43 -0400 Subject: [PATCH] A bit of syntactic sugar for critical sections. --- .../vitro/webapp/utils/jena/Critical.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/Critical.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/Critical.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/Critical.java new file mode 100644 index 000000000..113645909 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/jena/Critical.java @@ -0,0 +1,39 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.utils.jena; + +import static com.hp.hpl.jena.shared.Lock.READ; +import static com.hp.hpl.jena.shared.Lock.WRITE; + +import com.hp.hpl.jena.rdf.model.Model; + +/** + * Use this in a try-with-resources block. + * + *
+ * try (Critical section = Critical.read(model)) {
+ * }
+ * 
+ */ +public class Critical implements AutoCloseable { + public static Critical read(Model model) { + return new Critical(model, READ); + } + + public static Critical write(Model model) { + return new Critical(model, WRITE); + } + + private final Model model; + + private Critical(Model model, boolean readLockRequested) { + this.model = model; + this.model.enterCriticalSection(readLockRequested); + } + + @Override + public void close() { + this.model.leaveCriticalSection(); + } + +}