You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by xu...@apache.org on 2009/03/27 10:16:12 UTC
svn commit: r759067 - in /geronimo/xbean/trunk/xbean-naming/src:
main/java/org/apache/xbean/naming/context/WritableContext.java
test/java/org/apache/xbean/naming/context/WritableContextTest.java
Author: xuhaihong
Date: Fri Mar 27 09:16:06 2009
New Revision: 759067
URL: http://svn.apache.org/viewvc?rev=759067&view=rev
Log:
XBEAN-122 Object cannot be removed from context in many circumstances, Thanks for the patch, Jack Cai !
Modified:
geronimo/xbean/trunk/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java
geronimo/xbean/trunk/xbean-naming/src/test/java/org/apache/xbean/naming/context/WritableContextTest.java
Modified: geronimo/xbean/trunk/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java?rev=759067&r1=759066&r2=759067&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java (original)
+++ geronimo/xbean/trunk/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java Fri Mar 27 09:16:06 2009
@@ -120,11 +120,11 @@
if (super.removeBinding(name, removeNotEmptyContext)) {
return true;
}
- removeBinding(bindingsRef, name, removeNotEmptyContext);
+ removeBinding(bindingsRef, name, getNameInNamespace(name), removeNotEmptyContext);
return true;
}
- private boolean removeBinding(AtomicReference<Map<String, Object>> bindingsRef, String name, boolean removeNotEmptyContext) throws NamingException {
+ private boolean removeBinding(AtomicReference<Map<String, Object>> bindingsRef, String name, String nameInNamespace, boolean removeNotEmptyContext) throws NamingException {
writeLock.lock();
try {
Map<String, Object> bindings = bindingsRef.get();
@@ -140,7 +140,7 @@
}
bindingsRef.set(newBindings);
- Map<String, Object> newIndex = removeFromIndex(name);
+ Map<String, Object> newIndex = removeFromIndex(nameInNamespace);
indexRef.set(newIndex);
return true;
} finally {
@@ -234,7 +234,7 @@
}
protected boolean removeBinding(String name, boolean removeNotEmptyContext) throws NamingException {
- if (WritableContext.this.removeBinding(bindingsRef, name, false)) {
+ if (WritableContext.this.removeBinding(bindingsRef, name, getNameInNamespace(name), removeNotEmptyContext)) {
return true;
}
return super.removeBinding(name, false);
Modified: geronimo/xbean/trunk/xbean-naming/src/test/java/org/apache/xbean/naming/context/WritableContextTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-naming/src/test/java/org/apache/xbean/naming/context/WritableContextTest.java?rev=759067&r1=759066&r2=759067&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-naming/src/test/java/org/apache/xbean/naming/context/WritableContextTest.java (original)
+++ geronimo/xbean/trunk/xbean-naming/src/test/java/org/apache/xbean/naming/context/WritableContextTest.java Fri Mar 27 09:16:06 2009
@@ -908,5 +908,67 @@
w.rebind("test/test/GBean/resourceSource", 1);
assertEquals(new Integer(1), w.lookup("test/test/GBean/resourceSource"));
}
+
+ public void testRemoveDeepBinding_Leaf() throws Exception {
+ WritableContext w = new WritableContext("jca:");
+ // Test when only one object
+ w.addDeepBinding(w.getNameParser("").parse("test/test/GBean/resourceSource"), WritableContextTest.STRING_VAL, true, true);
+ assertEquals(WritableContextTest.STRING_VAL, w.lookup("test/test/GBean/resourceSource"));
+ w.removeDeepBinding(w.getNameParser("").parse("test/test/GBean/resourceSource"), true, true);
+ try {
+ w.lookup("test");
+ fail("Expected NameNotFoundException");
+ } catch (NameNotFoundException expected) {
+ }
+ w.addDeepBinding(w.getNameParser("").parse("test/test/GBean/resourceSource"), WritableContextTest.STRING_VAL, true, true);
+ assertEquals(WritableContextTest.STRING_VAL, w.lookup("test/test/GBean/resourceSource"));
+ w.addDeepBinding(w.getNameParser("").parse("test/test/GBean/rresourceSource2"), new Integer(2), true, true);
+ assertEquals(new Integer(2), w.lookup("test/test/GBean/rresourceSource2"));
+
+ w.removeDeepBinding(w.getNameParser("").parse("test/test/GBean/resourceSource"), true, true);
+ assertEquals(new Integer(2), w.lookup("test/test/GBean/rresourceSource2"));
+ try {
+ w.lookup("test/test/GBean/resourceSource");
+ fail("Expected NameNotFoundException");
+ } catch (NameNotFoundException expected) {
+ }
+ w.removeDeepBinding(w.getNameParser("").parse("test/test/GBean/rresourceSource2"), true, true);
+ try {
+ w.lookup("test");
+ fail("Expected NameNotFoundException");
+ } catch (NameNotFoundException expected) {
+ }
+ }
+
+ public void testRemoveDeepBinding_Intermediate() throws Exception {
+ WritableContext w = new WritableContext("jca:");
+ // Test when only one object
+ w.addDeepBinding(w.getNameParser("").parse("test/test1/GBean/resourceSource"), WritableContextTest.STRING_VAL, true, true);
+ assertEquals(WritableContextTest.STRING_VAL, w.lookup("test/test1/GBean/resourceSource"));
+ w.removeDeepBinding(w.getNameParser("").parse("test/test1/GBean/resourceSource"), true, true);
+ try {
+ w.lookup("test");
+ fail("Expected NameNotFoundException");
+ } catch (NameNotFoundException expected) {
+ }
+ w.addDeepBinding(w.getNameParser("").parse("test/test1/GBean/resourceSource"), WritableContextTest.STRING_VAL, true, true);
+ assertEquals(WritableContextTest.STRING_VAL, w.lookup("test/test1/GBean/resourceSource"));
+ w.addDeepBinding(w.getNameParser("").parse("test/test2/GBean/rresourceSource2"), new Integer(2), true, true);
+ assertEquals(new Integer(2), w.lookup("test/test2/GBean/rresourceSource2"));
+
+ w.removeDeepBinding(w.getNameParser("").parse("test/test1/GBean/resourceSource"), true, true);
+ assertEquals(new Integer(2), w.lookup("test/test2/GBean/rresourceSource2"));
+ try {
+ w.lookup("test/test1");
+ fail("Expected NameNotFoundException");
+ } catch (NameNotFoundException expected) {
+ }
+ w.removeDeepBinding(w.getNameParser("").parse("test/test2/GBean/rresourceSource2"), true, true);
+ try {
+ w.lookup("test");
+ fail("Expected NameNotFoundException");
+ } catch (NameNotFoundException expected) {
+ }
+ }
}