We found that caching performance hits a bottleneck with threads blocking on MetaDataRepository.getMetaData(). The changes in this issue looked to be the kind of thing that would help, but the original patch was for OpenJPA 0.9.x and a lot has changed in the code since then. Much of the patch was getting rid of classes in the org.apache.openjpa.lib.util.concurrent package and using edu.emory.mathcs.backport.java.util.concurrent classes instead. This looks to have been done at some other time in the code, using the standard java.util.concurrent package instead.
So I went through all the code affected by the original patch and made similar changes as appropriate, basically changing a lot of synchronized methods to use blocks that lock and unlock using the ReentrantReadWriteLock() and ReentrantLock() classes.
The resultant patch file is attached. This was found to give a much more scalable performance, we no longer have threads blocked on MetaDataRepository.getMetaData().