Сессионный компонент без сохранения состояния, вызванный вне контекста, отсутствует EntityManager

Я новичок в Java EE, поэтому мой вопрос может быть очень простым. Я создал следующую веб-службу REST с сеансовым компонентом без сохранения состояния (упрощенно):

@Path("/list/")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Stateless
public class ListResource {

    @PersistenceContext(unitName = "unitName")
    private EntityManager em;

    @GET
    @Path("/")
    public List<Compound> getCompounds() {

    List<Compound> list = tq.getResultList();

    if (list.isEmpty()) {
        throw new WebApplicationException(Response.status(404).entity("There are no compounds in database.").build());
    }

    return list;
    }
}

Это работает как шарм. Он доступен через URL и возвращает JSON. Проблема в том, что у меня есть другая часть программы, написанная на простой Java, которая должна использовать этот сеансовый компонент в качестве некоторой модели для получения всех соединений.

Проблема в том, что когда я инициализирую этот компонент сеанса где-то, он находится вне контекста персистентности и поэтому не знает, что EntityManager может получить доступ к базе данных. Я считаю.

Я не знаю, что делать. Могу ли я инициализировать класс ListResource в удаленной части кода и заставить работать внедрение зависимостей EntityManager? Или каким-то образом получить контекст сохранения, а затем инициализировать этот сеансовый компонент?

Я надеюсь, что это имеет смысл. Его сложная проблема для меня, чтобы описать.


person Macejkou    schedule 06.11.2012    source источник


Ответы (1)


Если у вас есть веб-служба и автономное приложение, вызывающее один и тот же компонент, я бы рекомендовал вам переместить функциональность в отдельный компонент без сохранения состояния и создать для него удаленный и локальный интерфейсы. Таким образом, вы можете внедрить локальный компонент в компонент веб-службы и вызвать удаленный компонент с помощью jndi.

Подробнее о доступе к Java EE bean-компонентам здесь.

Кроме того, ваш клиентский код Java может вызвать веб-службу для получения всех данных. См. этот вопрос о способах подключения к службе RESTful.

person Denis Tulskiy    schedule 13.11.2012