getInstance() should return the same object every time, and ManagedReferenceFactory.getReference() should return a new reference every time. You should be doing the lookup in getReference() and returning a managed reference that directly wraps the value.  

We ahve been using org.jboss.as.naming.ValueManagedReference for this, however it needs the constuction of an ImmediateValue as well. It would probablty be a good idea to create an ImmediateManagedReference class and use it to replace all the places where ValueManagedReference is used with ImmediateValue.