public <V> Adapter.Getter<V> makeGetter(String methodName, Class<V> _class)  {
    try {
      final Method method = version.getClass().getMethod(methodName);
      return new Adapter.Getter<V>() {
        public V call() {
          try {
            Transaction me  = Thread.getTransaction();
            Transaction other = null;
              
            while (true) {
              synchronized (Adapter.this) {
                other = openRead(me);
                //other = openWrite(me);
                if (other == null) {
                	
                  return (V)method.invoke(version);
                }
              }         
              manager.resolveConflict(me, other);
            }
          } catch (SecurityException e) {
            throw new PanicException(e);
          } catch (IllegalAccessException e) {
            throw new PanicException(e);
          } catch (InvocationTargetException e) {
            throw new PanicException(e);
          }
        }};
    } catch (NoSuchMethodException e) {
      throw new PanicException(e);
    }
  }