Я знаю, что могу установить свойства ETAG и LastModified для Представления / ПредставленияInfo.
Но у меня есть простой ресурс, реализованный так:
public class AccountServerResource extends ServerResource implements AccountResource {
private static Logger log = Logger.getLogger(AccountServerResource.class.getName());
@Override
public Account retrieve() {
User user = getClientInfo().getUser();
AccountDAO dao = new AccountDAO();
Account ret = dao.getAccountByEmail(user.getEmail());
log.info("retrieved " + ret);
// getResponse().getEntity() == null at this point !!!
// ---> cannot do this : getResponse().getEntity().setModificationDate(ret.getLastModified());
return ret;
}
}
Представление еще не прикреплено к ответу в настоящее время.
Когда / как мне установить теги ETAG / LastModified?
Какая здесь рекомендуемая практика?
--- UPDATE ---
Я попробовал этот подход без удачи:
@Override
public Account retrieve() {
User user = getClientInfo().getUser();
AccountDAO dao = new AccountDAO(user.getNamespace());
AccountDAO dao = new AccountDAO();
Account ret = dao.getAccountByEmail(user.getEmail());
log.info("retrieved " + ret);
setOnSent(new StrongEtagCallback<Account>(ret));
return ret;
}
И реализация StrongEtagCallback выглядит так:
public class StrongEtagCallback<T extends DomainResource> implements Uniform {
private static SimpleDateFormat df = new SimpleDateFormat("ddMMyyyyHHmmssSSS");
private DomainResource d;
public StrongEtagCallback(T domainResource) {
d = domainResource;
}
@Override
public void handle(Request request, Response response) {
String eTag = d.getClass().getSimpleName() + "-" + d.getId() + "-" + df.format(d.getLastModified());
response.getEntity().setTag(new Tag(eTag, false));
}
}
Где все мои сущности реализуют DomainResource, который требует, чтобы у них были идентификатор и дата последнего изменения.
Но это НЕ работает. Я действительно ожидал, что это сработает, это очень элегантно!
Хотя вызывается StrongEtagCallback, ETAG устанавливает серверную часть на объекте. Мой Wireshark и мой клиент GWT не видят заголовок E-TAG в ответе на ответ. Погружаемся глубже.