2016-04-03 3 views
0

Я просто не могу найти путь к доступу к ресурсу JAX-RS, который развернут в wildfly.найти путь к ресурсу JAX-RS

ear.ear ПОМ:

<parent> 
    <artifactId>jee-services</artifactId> 
    <groupId>org.mycompany</groupId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 
<packaging>ear</packaging> 
<modelVersion>4.0.0</modelVersion> 
<artifactId>ear</artifactId> 
<dependencies> 
    <dependency> 
     <groupId>org.mycompany</groupId> 
     <artifactId>ejb_book</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>ejb</type> 
    </dependency> 
</dependencies> 

ejb_book ПОМ:

<parent> 
    <artifactId>jee-services</artifactId> 
    <groupId>org.mycompany</groupId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 
<modelVersion>4.0.0</modelVersion> 
<packaging>ejb</packaging> 
<artifactId>ejb_book</artifactId> 

применение конфигурации

@ApplicationPath("/resources") 
public class ApplicationConfig extends Application { 
} 

ресурс

@Stateless 
@Path("/books") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public class BookResource extends AbstractFacade<Book> { 
    @PersistenceContext 
    private EntityManager entityManager; 

    @GET 
    @Path("/getBooks") 
    public Book getBook() { 
     return new Book(); 
    } 

Я думаю, что проблема в том, что я упаковка мой ejb_book.jar в ear.ear (где я собираю все другие модули EJB-)

Я пробовал:

localhost:8080/ear/resources/books/getBooks 

и много других комбинаций, но ни один из них работали.

Приложение отлично развертывает сервер WildFly.

BTW: есть ли инструмент, помогающий людям получить доступ к их ресурсу JAX-RS? Например, из IDE. Поэтому мой вопрос больше не будет проблемой.

+0

Вы также упаковываете WAR в свой EAR? Для доступа к службе REST вам необходимо предоставить контекстный корень. – aribeiro

+0

Нет ВОЙНЫ. Я просто позвоню в свой браузер. Я что-то пропустил? –

+0

Да, вы пропустили. Как упоминалось в [документации] (http://download.oracle.com/otn-pub/jcp/jaxrs-2_0-fr-eval-spec/jsr339-jaxrs-2.0-final-spec.pdf?AuthParam=1459700634_e34cc8220f019bf96f82813e0e098184) "* Приложение JAX-RS упаковано в виде веб-приложения в .war-файле. *". Поэтому вам необходимо иметь WAR, чтобы обеспечить * context-root * для службы REST вашего приложения. Только тогда вы сможете позвонить в службу REST в форме: * http: // localhost: 8080/context-root/ear-1.0-SNAPSHOT/resources/books/getBooks *. – aribeiro

ответ

2

Согласно JAX-RS 2.0 спецификации, раздел 2.3.2 Servlet

Приложение JAX-RS поставляется в виде веб-приложения в .war файле.

Поскольку вы не упаковывать приложения в качестве модуля WAR, и ни у вас есть модуль WAR в ушном, вы не предоставляет контекстно-корень вашего (веб) приложения.

Это мешает вам получить доступ к вашему REST API через желаемым образом:

http://localhost:8080/<context-root>/resources/books/getBooks 

В качестве решения можно либо упаковать все приложение как WAR, размещая классы приложений в WEB-INF/классы или WEB-INF/lib и необходимые библиотеки в WEB-INF/lib, или вы можете поддерживать использование EAR, добавляя к нему WAR-модуль.

+0

Какова современная структура проекта приложения JavaEE? Предположим, что он является единственным бэкэндом и предоставляет некоторые ресурсы для отдыха. как я. Разделяйте WAR для каждого домена (микросервисы) или всего в одной WAR? –

+0

Я не совсем уверен, понял ли я ваш вопрос, но что касается [документации] (https://jersey.java.net/documentation/latest/getting-started.html#new-webapp), все будет помещенный в одну WAR. Теперь, когда вы говорите * Separted WARs для каждого домена *, вы имеете в виду, что у вас есть несколько приложений JAX-RS, и каждый из них будет в WAR? – aribeiro

+0

Да. Я имею в виду, если дело доходит до больших приложений, вам нужно каким-то образом их структурировать. Затем создайте user.war, который отвечает за всю бизнес-логику в этом домене. А затем product.war и так далее. Или какой способ пойти на разъединение? –

Смежные вопросы