code: @Override
  	public void put(Object entity) throws EntityExistsException {
  		if (entity == null) {
  			throw new IllegalArgumentException("'entity' must not be [" + entity + "]");
  		}
  		
  		assertTransactional();
  		
  		for (Log log : transaction.get().logs()) {
  			if (keyValue(entity).equals(keyValue(log.entity()))) {
  				throw new IllegalStateException("Log [" + log.operation()
  						+ "] -> [" + Log.Operation.PUT
  						+ "] is not allowed: This operation must be first");
  			}
  		}
  		
  		Transaction tx = transaction.get().transaction();
  		Key key = Keys.create(Translation.toKind(entity.getClass()), keyValue(entity));
  		Entity e = datastore.get(tx, key);
  		
  		if (e != null) {
  			throw new EntityExistsException(key);
  		}
  		
  		datastore.put(tx, Translation.toEntities(entity));
  		List<Log> logs = transaction.get().logs();
  		Log log = new Log(logs.size() + 1, Log.Operation.PUT, entity);
  		log.state(State.UNCOMMITTED);
  		logs.add(log);
  	}
docs: Puts the specified entity instance into App Engine Datastore newly.
  This method must be invoked under a transaction. This method throws
  {@code EntityExistsException} if the entity that has the same key as
  the specified entity has been already stored.
  
  @param entity The entity instance to be put into App Engine Datastore.
  @throws EntityExistsException If the entity that has the same key as the
  specified entity has already existed.