В соответствии с этим учебным курсом NetBeans о веб-службах RESTFul в Джерси вы можете решить, стоит ли
создать подкласс javax.ws.rs.core.Application, все остальные ресурсы
будет зарегистрирован этим классом автоматически (Java EE 6)
или
создать адаптер сервлета REST Джерси по умолчанию в web.xml.
Я всегда использовал второй вариант, который заключается в добавлении этого к вашему web.xml
:
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
Использование вашего REST Web-сервиса в качестве EJB, по моему опыту, чрезвычайно полезно. Вы можете внедрить его в любое удобное для вас место, вы можете добавить в него свой EntityManager и даже использовать его в качестве DAO в некоторых простых ситуациях.
По поводу вашего вопроса / комментария о возможностях и ограничениях: корпоративные компоненты работают в контейнере EJB, независимо от того, развернуты они в файле war или нет. Вы можете внедрить в них JMS ConnectionFactory как ресурс, как описано в этом разделе Учебного руководства по Java EE 6. Благодаря внедрению ConnectionFactory, вы можете отправлять сообщения JMS. Если вы хотите получать сообщения JMS асинхронно, вам нужно определить компонент, управляемый сообщениями, как объяснено в этом разделе вышеупомянутого руководства.
Я никогда не пытался расширить тот же EJB-компонент, который использовался для веб-службы Jersey, чтобы реализовать интерфейс MessageListener, но я думаю, что это также возможно (если нет, вы можете внедрить MDB в корневой компонент без сохранения состояния Jersey).
Наконец, вы можете использовать Управляемые контейнером транзакции, как объяснено здесь . Более того, с это руководство по NetBeans :
Чтобы вы могли видеть, что приложение будет использовать Java
API транзакций (JTA) (транзакция-тип = "JTA"). Это указывает на то, что
ответственность за управление жизненным циклом объектов в
контекст постоянства назначен контейнеру.
<persistence-unit name="em" transaction-type="JTA">