Создание службы REST с помощью Glassfish 4 вне WAR

У меня есть служба отдыха, реализованная следующим образом

@Stateless
@Path("/Person")
@Produces(MediaType.APPLICATION_XML)
public class RestService {

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

    @GET
    @Path("{id}")
    public Response Book(@PathParam("id") Long id) {
        Person person = em.find(Person.class, id);
        if(person == null) {
            return Response.status(Response.Status.FORBIDDEN).build();
        }
        return Response.ok(person).build();
    }
}

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

    private final Set<Class<?>> classes;

    public ApplicationConfig() {
        HashSet<Class<?>> c = new HashSet<Class<?>>();

        c.add(RestService.class);

        classes = Collections.unmodifiableSet(c);
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }

}

Он упакован в jar-файл вместе с другими ejbs, за пределами любого .war. Я могу получить доступ к сервису только в том случае, если у меня в ухе окажется военная посылка. Я могу получить к нему доступ с помощью корня контекста войны, такого как localhost:8080/warContextRoot/rs/. Есть ли способ развернуть службу отдыха без развертывания войны и при этом получить к ней доступ?


person rubixibuc    schedule 01.12.2013    source источник


Ответы (1)


Я думаю, причина в том, что вы реализовали веб-службу REST в сеансовом компоненте EJB, а EJB обычно объединяются в файлы EAR.

В качестве альтернативы вы можете реализовать веб-службу REST как обычный сервлет, который обслуживает запросы с помощью своих стандартных методов GET/POST, после чего его можно развернуть в WAR. И вы можете вызвать веб-службу REST через URL-адрес, определенный в сопоставлении сервлета web.xml.

Надеюсь это поможет.

person shuang    schedule 01.12.2013