Как создать интерфейс Home в службе Seam Rest, если интерфейс Home имеет ссылку на пользователя? - PullRequest
3 голосов
/ 30 сентября 2010

Я занимаюсь разработкой своего первого приложения для Android и Seam + и столкнулся с некоторыми новыми сценариями, как и ожидалось.

Теперь специально для этого приложения я решил не сохранять никакого состояния, потому что, вероятно, от 80% до 90% обращений к серверу службы REST будут специально выполнять простую синхронизацию, а клиент на некоторое время пропадет., поэтому (вероятно) нет смысла сохранять какое-либо состояние на стороне сервера для этих вызовов.

Что ж, есть особая процедура, в которой мне нужно сохранить объект, отправленный устройством на сторону сервера, и этот объектэто привязка к конкретному пользователю (на мой взгляд, очень распространенный сценарий).

Итак, идет пример кода.

В интерфейсе Home есть пользователь, введенный Seam:

@Name("pesoHome")
public class PesoHome extends EntityHome<Peso> {

    private static final long serialVersionUID = 6087763635317971234L;

    @In
    User user;

Чем нам нужна служба отдыха, которая использует этот домашний интерфейс:

public class PesoRest{

    @Logger
    Log log;

    @In(create = true)
    UserPesquisa userPesquisa;

    @In(create = true)
    PesoHome pesoHome;

    @POST
    @Path("/cadastrar/{userEmail}")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response cadastraPeso(@PathParam("userEmail") String email, String jsonString)
    {
            String json = jsonString;
            System.out.println("String jSon no servidor ==>> " + json);

И чем из-за внедрения пользователем в домашний интерфейс следующие ошибки запускаются во время выполнения:

Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: pesoHome
    at org.jboss.seam.Component.newInstance(Component.java:2144)
    ... 46 more
Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: pesoHome.user

Обратите внимание, что в теле запроса объект JSon содержит информацию об этом пользователе, которая позволяет восстановить этого пользователя, используя также введенный userPesq.ссылка uisa.Я знаю, что у меня мог бы быть другой подход, в котором я собирал бы компонент шва без ссылок на пользователя, а не в него, собирал пользователя и помещал его в новый диалог, а затем вставлял нужную домашнюю ссылку, но ...Мне было интересно, что, вероятно, должен быть какой-то более стандартный подход для этого, поскольку это общий сценарий.Какие-либо предложения?:)

[] s

1 Ответ

2 голосов
/ 01 октября 2010

как предложил Артур в комментариях к этой теме, я немного изменил код, и теперь он работает:

PesoHome:

    @In(required=false)
    User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

и чем в PesoRest:

User usuario = userPesquisa.pesquisaUsuarioPorEmail(email);
pesoHome.setUser(usuario);

И поскольку пользователь больше не требуется при создании, ошибка не вызывается, и я могу выполнить позднее связывание после поиска в БД для восстановления правильного пользователя. Довольно простое решение. Спасибо Артур.

[] S

...