You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by Honoré David <dh...@oma.be> on 2006/05/05 13:03:07 UTC
Fix for links management.
There is a patch for org.apache.slide.structure.ObjectNode .Without it,
links are lost when cloning an object, and when deleting an object which
has more than one link only one link/2 is deleted and then
ServiceException occur because Integrity of database is not good.
by the way the cache management is wrong. the object in global cache are
modified while in a transaction. ... then if transaction is rolled back,
Object in cache are invalid and does not match database anymore, but are
always used. (patch for those bugs are comming)
Index: src/share/org/apache/slide/structure/ObjectNode.java
===================================================================
--- src/share/org/apache/slide/structure/ObjectNode.java (revision
382350)
+++ src/share/org/apache/slide/structure/ObjectNode.java (working copy)
@@ -71,13 +71,12 @@
*/
private Vector links = null;
- /*
+ /**
* If true then the {@link #links} vector is shared between multiple
* ObjectNode-instances and thus must not be modified.
*
- *FIXME Never read! Do we need to implement linkSharing
*/
- //private boolean linksShared;
+ private boolean linksShared;
/**
* Vector of bindings. Before modifying this vector you must check
@@ -369,7 +368,7 @@
if (this.links == null) {
return EmptyEnumeration.INSTANCE;
} else {
- return links.elements();
+ return ((Vector)links.clone()).elements();
}
}
@@ -409,7 +408,7 @@
try {
// init the shared fields to let clone() copy them
- //this.linksShared=true;
+ this.linksShared=true;
this.bindingsShared=true;
result = (ObjectNode) super.clone();
} catch(CloneNotSupportedException e) {
@@ -481,6 +480,10 @@
*/
public void addLink( LinkNode link ) {
if (this.links == null) this.links = new Vector();
+ if (linksShared) {
+ links = (Vector) links.clone();
+ linksShared = false;
+ }
links.add(link.getUri());
}
@@ -540,6 +543,10 @@
* @param link
*/
public void removeLink(LinkNode link) {
+ if (linksShared) {
+ links = (Vector) links.clone();
+ linksShared = false;
+ }
if (this.links != null) {
links.remove(link.getUri());
}
Note, I do not post the patch in bugzilla because there is no more
commiter working on slide. Warning of compilation error, spam on mailing
list ... etc ... I think Slide was a good project, but is dead. If I am
wrong tell me.
Have a nice day everybody.