public Object invokeHome(Invocation mi) throws Exception {
    EntityEnterpriseContext ctx = (EntityEnterpriseContext) mi.getEnterpriseContext();
    Transaction tx = mi.getTransaction();

    Object rtn = getNext().invokeHome(mi);

    // An anonymous context was sent in, so if it has an id it is a real instance now
    if (ctx.getId() != null) {

      // it doesn't need to be read, but it might have been changed from the db already.
      ctx.setValid(true);

      if (tx != null) {
        BeanLock lock = container.getLockManager().getLock(ctx.getCacheKey());
        try {
          lock.schedule(mi);
          register(ctx, tx); // Set tx
          lock.endInvocation(mi);
        } finally {
          container.getLockManager().removeLockRef(lock.getId());
        }
      }
    }
    return rtn;
  }