[ https://issues.apache.org/jira/browse/TOMEE-2102?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Svetlin Zarev updated TOMEE-2102: --------------------------------- Description: Imagine you have the flowing context "a/b/object". The context tree can be created in two ways: 1. Relative to the root or some {code} IvmContext root = IvmContext.createRootContext(); root.bind("a/b/object", new Object); {code} 2. Relative to some node: {code} IvmContext root = IvmContext.createRootContext(); root.bind("a", null); IvmContext a = root.lookup("a"); a.bind("b", null); IvmContext b = root.lookup("b") a.bind("object", new Object()) {code} So when one looks up "object" or "a" or "b" or object, one has to get the very same result regardless if the context tree was created by 1 or by 2. Yet this is not the case when it comes to the IvmContext. Maybe the most obvious (and shocking) issue is that IvmContext allows to bind 2 different objects to the same name ! Example: {code} IvmContext root = IvmContext.createRootContext(); root.bind("a/b/object", new Object()); IvmContext b = (IvmContext) root.lookup("a/b"); //already bound from root -> must fail, yet it does not b.bind("object", new Object()); {code} I've provided various test cases for different combinations of bind/unbind/lookup that reproduce the issue. was: Imagine you have the flowing context "a/b/object". The context tree can be created in two ways: 1. Relative to the root or some {code} IvmContext root = IvmContext.createRootContext(); root.bind("a/b/object", new Object); {code} 2. Relative to some node: IvmContext root = IvmContext.createRootContext(); root.bind("a", null); IvmContext a = root.lookup("a"); a.bind("b", null); IvmContext b = root.lookup("b") a.bind("object", new Object()) {code} So when one looks up "object" or "a" or "b" or object, one has to get the very same result regardless if the context tree was created by 1 or by 2. Yet this is not the case when it comes to the IvmContext. Maybe the most obvious (and shocking) issue is that IvmContext allows to bind 2 different objects to the same name ! Example: {code} IvmContext root = IvmContext.createRootContext(); root.bind("a/b/object", new Object()); IvmContext b = (IvmContext) root.lookup("a/b"); //already bound from root -> must fail, yet it does not b.bind("object", new Object()); {code} I've provided various test cases for different combinations of bind/unbind/lookup that reproduce the issue. > IvmContext bind/unbind creates duplicate contexts > ------------------------------------------------- > > Key: TOMEE-2102 > URL: https://issues.apache.org/jira/browse/TOMEE-2102 > Project: TomEE > Issue Type: Bug > Reporter: Svetlin Zarev > > Imagine you have the flowing context "a/b/object". The context tree can be > created in two ways: > 1. Relative to the root or some > {code} > IvmContext root = IvmContext.createRootContext(); > root.bind("a/b/object", new Object); > {code} > 2. Relative to some node: > {code} > IvmContext root = IvmContext.createRootContext(); > root.bind("a", null); > IvmContext a = root.lookup("a"); > a.bind("b", null); > IvmContext b = root.lookup("b") > a.bind("object", new Object()) > {code} > So when one looks up "object" or "a" or "b" or object, one has to get the > very same result regardless if the context tree was created by 1 or by 2. Yet > this is not the case when it comes to the IvmContext. Maybe the most obvious > (and shocking) issue is that IvmContext allows to bind 2 different objects to > the same name ! Example: > {code} > IvmContext root = IvmContext.createRootContext(); > root.bind("a/b/object", new Object()); > IvmContext b = (IvmContext) root.lookup("a/b"); > //already bound from root -> must fail, yet it does not > b.bind("object", new Object()); > {code} > I've provided various test cases for different combinations of > bind/unbind/lookup that reproduce the issue. -- This message was sent by Atlassian JIRA (v6.4.14#64029)