From: <jom...@us...> - 2016-04-06 16:24:19
|
Revision: 1884 http://sourceforge.net/p/jason/svn/1884 Author: jomifred Date: 2016-04-06 16:24:17 +0000 (Wed, 06 Apr 2016) Log Message: ----------- bb support for concurrent access Modified Paths: -------------- trunk/src/jason/bb/BeliefBase.java trunk/src/jason/bb/ChainBB.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/jason/bb/IndexedBB.java trunk/src/jason/bb/JDBCPersistentBB.java trunk/src/jason/bb/TextPersistentBB.java Modified: trunk/src/jason/bb/BeliefBase.java =================================================================== --- trunk/src/jason/bb/BeliefBase.java 2016-04-06 16:21:17 UTC (rev 1883) +++ trunk/src/jason/bb/BeliefBase.java 2016-04-06 16:24:17 UTC (rev 1884) @@ -134,4 +134,7 @@ public Element getAsDOM(Document document); public BeliefBase clone(); + + /** Gets a lock for the BB */ + public Object getLock(); } Modified: trunk/src/jason/bb/ChainBB.java =================================================================== --- trunk/src/jason/bb/ChainBB.java 2016-04-06 16:21:17 UTC (rev 1883) +++ trunk/src/jason/bb/ChainBB.java 2016-04-06 16:24:17 UTC (rev 1884) @@ -90,4 +90,10 @@ } return r; } + + public final Object lockBB = new Object(); + + public Object getLock() { + return lockBB; + } } Modified: trunk/src/jason/bb/DefaultBeliefBase.java =================================================================== --- trunk/src/jason/bb/DefaultBeliefBase.java 2016-04-06 16:21:17 UTC (rev 1883) +++ trunk/src/jason/bb/DefaultBeliefBase.java 2016-04-06 16:24:17 UTC (rev 1884) @@ -72,6 +72,12 @@ } } + public final Object lockBB = new Object(); + + public Object getLock() { + return lockBB; + } + public Set<Atom> getNameSpaces() { return nameSpaces.keySet(); } @@ -260,7 +266,7 @@ /** @deprecated use iterator() instead of getAll */ public Iterator<Literal> getAll() { return iterator(); - } + } public boolean abolish(PredicateIndicator pi) { BelEntry entry = belsMapDefaultNS.remove(pi); // TODO: consider other NS (?) this method is not used by jason @@ -352,22 +358,24 @@ Element ebels = null; while (tries < 10) { // max 10 tries try { - ebels = (Element) document.createElement("beliefs"); - Element enss = (Element) document.createElement("namespaces"); - Element ens = (Element) document.createElement("namespace"); - ens.setAttribute("id", "default"); // to ensure default is the first - enss.appendChild(ens); - for (Atom ns: getNameSpaces()) { - if (ns == Literal.DefaultNS) - continue; - ens = (Element) document.createElement("namespace"); - ens.setAttribute("id", ns.getFunctor()); + synchronized (getLock()) { + ebels = (Element) document.createElement("beliefs"); + Element enss = (Element) document.createElement("namespaces"); + Element ens = (Element) document.createElement("namespace"); + ens.setAttribute("id", "default"); // to ensure default is the first enss.appendChild(ens); + for (Atom ns: getNameSpaces()) { + if (ns == Literal.DefaultNS) + continue; + ens = (Element) document.createElement("namespace"); + ens.setAttribute("id", ns.getFunctor()); + enss.appendChild(ens); + } + ebels.appendChild(enss); + for (Literal l: this) + ebels.appendChild(l.getAsDOM(document)); + break; // quit the loop } - ebels.appendChild(enss); - for (Literal l: this) - ebels.appendChild(l.getAsDOM(document)); - break; // quit the loop } catch (Exception e) { // normally concurrent modification, but others happen tries++; e.printStackTrace(); Modified: trunk/src/jason/bb/IndexedBB.java =================================================================== --- trunk/src/jason/bb/IndexedBB.java 2016-04-06 16:21:17 UTC (rev 1883) +++ trunk/src/jason/bb/IndexedBB.java 2016-04-06 16:24:17 UTC (rev 1884) @@ -97,4 +97,11 @@ nbb.indexedBels = new HashMap<String,Structure>(this.indexedBels); return nbb; } + + public final Object lockBB = new Object(); + + public Object getLock() { + return lockBB; + } + } Modified: trunk/src/jason/bb/JDBCPersistentBB.java =================================================================== --- trunk/src/jason/bb/JDBCPersistentBB.java 2016-04-06 16:21:17 UTC (rev 1883) +++ trunk/src/jason/bb/JDBCPersistentBB.java 2016-04-06 16:24:17 UTC (rev 1884) @@ -714,4 +714,9 @@ return null; } + public final Object lockBB = new Object(); + + public Object getLock() { + return lockBB; + } } Modified: trunk/src/jason/bb/TextPersistentBB.java =================================================================== --- trunk/src/jason/bb/TextPersistentBB.java 2016-04-06 16:21:17 UTC (rev 1883) +++ trunk/src/jason/bb/TextPersistentBB.java 2016-04-06 16:24:17 UTC (rev 1884) @@ -56,4 +56,11 @@ } nextBB.stop(); } + + public final Object lockBB = new Object(); + + public Object getLock() { + return lockBB; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |