void commit(Transaction tx) {
   if (tx != null) {
     TxCommitHook hook = txCommitHooks.remove(tx);
     if (hook != null) {
       for (PropertyIndex index : hook.getAddedPropertyIndexes()) {
         addPropertyIndex(index);
       }
     }
   }
 }
 public Iterable<PropertyIndex> index(String key) {
   List<PropertyIndex> list = indexMap.get(key);
   TxCommitHook hook = txCommitHooks.get(getTransaction());
   if (hook != null) {
     PropertyIndex index = hook.getIndex(key);
     if (index != null) {
       List<PropertyIndex> added = new ArrayList<PropertyIndex>();
       if (list != null) {
         added.addAll(list);
       }
       added.add(index);
       return added;
     }
   }
   if (list == null) {
     list = Collections.emptyList();
   }
   return list;
 }
 // concurent transactions may create duplicate keys, oh well
 PropertyIndex createPropertyIndex(String key) {
   Transaction tx = getTransaction();
   if (tx == null) {
     throw new NotInTransactionException("Unable to create property index for " + key);
   }
   TxCommitHook hook = txCommitHooks.get(tx);
   if (hook == null) {
     hook = new TxCommitHook();
     txCommitHooks.put(tx, hook);
   }
   PropertyIndex index = hook.getIndex(key);
   if (index != null) {
     return index;
   }
   int id = (int) idGenerator.nextId(PropertyIndex.class);
   index = new PropertyIndex(key, id);
   hook.addIndex(index);
   persistenceManager.createPropertyIndex(key, id);
   return index;
 }
 public PropertyIndex getIndexFor(int keyId) {
   PropertyIndex index = idToIndexMap.get(keyId);
   if (index == null) {
     TxCommitHook commitHook = txCommitHooks.get(getTransaction());
     if (commitHook != null) {
       index = commitHook.getIndex(keyId);
       if (index != null) {
         return index;
       }
     }
     String indexString;
     indexString = persistenceManager.loadIndex(keyId);
     if (indexString == null) {
       throw new NotFoundException("Index not found [" + keyId + "]");
     }
     index = new PropertyIndex(indexString, keyId);
     addPropertyIndex(index);
   }
   return index;
 }