I have changed BeanContext to perform the check only for a singleton. The BeanContext is used here: org.apache.openejb.core.singleton.SingletonContainer#_invoke
boolean read = javax.ejb.LockType.READ.equals(beanContext.*getConcurrencyAttribute*(runMethod)); This result was wrong for a singleton where the class or interface is defined with javax.ejb.LockType.READ (i.e, NOT the default) - Methods that are not explicitly @Lock annotated should/must inherit the class/interface definition for @Lock. They were not, as it was hard coded javax.ejb.LockType.WRITE The org.apache.openejb.BeanContext#initDefaultLock checks for the default - You probably know a better way to do this, but the result is required for the variable 'this.lockType' - Please improve it, but I assure you this variable must be dynamic for a singleton and not hard coded. The example: http://openejb.apache.org/examples-trunk/simple-singleton/ was not working as described... @Singleton @Lock(READ) public class ComponentRegistry { public Collection<?> getComponents() {... <-- Was NOT inheriting @Lock(READ) it was @Lock(WRITE) This was causing issues for me where a WRITE lock was blocking a concurrent READ, which it should not. Andy. -- View this message in context: http://openejb.979440.n4.nabble.com/Re-svn-commit-r1357576-in-openejb-trunk-openejb-container-openejb-core-src-main-java-org-apache-opena-tp4656048p4656053.html Sent from the OpenEJB Dev mailing list archive at Nabble.com.