2016-12-31 11 views
-1

Я запрограммировал очень простой чат приложение JAX-RS развернутый с GlassFish 4.1 в Netbeans со следующими источниками:(решаемые) пытается поставить класс ресурсов JAX-RS в библиотеке не работает

practica2/Message.java     // entity from MySQL DataBase 
practica2/service/AbstractFacade.java 
        ApplicationConfig.java 
        MessageFacadeREST.java // resource class 

Эти исходные файлы получаются выполнения Netbeans «RESTful Web Services из базы данных» мастера с сообщением базы данных MySQL со следующими атрибутами:

- id   INT(11)  flags: PK NN AI 
- content  VARCHAR(250)  NN 
- user_sender VARCHAR(45)  NN 
- date  DATETIME   NN 

услуги в MessageFacadeREST.java состоят из двух методов: create и retrieveFromDate:

@POST 
@Override 
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public void create(Message entity) { 
    super.create(entity); 
} 

@POST 
@Path("from") 
@Consumes({"application/xml","application/json"}) 
@Produces({"application/xml", "application/json"}) 
public List<Message> retrieveFromDate(Message message) { 
    // retrieves list of messages newer than message 
} 

Сервер хорошо работает и чат-клиенты (в основном андроид) создают и извлекают сообщения на сервер.

Поскольку мои ученики должны заполнить retrieveFromDate Я бы хотел предоставить им двоичный архив MessageFacadeREST.class в библиотеке. Я готовлюсь папку server2 с:

server2/practica2/service/MessageFacadeREST.class 

добавить эту папку в качестве библиотеки и устранения соответствующих .java из источников. Затем он перестает работать. Я заметил, что Netbeans больше не добавляет MessageFacadeREST.class в методе addRestResourceClasses(). Если я пытаюсь загрузить его вручную:

@javax.ws.rs.ApplicationPath("webresources") 
public class ApplicationConfig extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<>(); 
     //addRestResourceClasses(resources); 
     resources.add(practica2.service.MessageFacadeREST.class); 
     return resources; 
    } 

    /** 
    * Do not modify addRestResourceClasses() method. 
    * It is automatically populated with 
    * all resources defined in the project. 
    * If required, comment out calling this method in getClasses(). 
    */ 
    //private void addRestResourceClasses(Set<Class<?>> resources) { 
    //} 
} 

я получаю:

GlassFish Server (1), deploy, null, false 
/home/francesc/NetBeansProjects/WebApplication1/nbproject/build-impl.xml:1049: The module has not been deployed. 
See the server log for details. 
BUILD FAILED (total time: 0 seconds) 

Тогда вопрос: как я могу разделить рабочее приложение, JAX-RS между источниками и библиотеки бинарных классов? Есть идеи?

EDIT (SOLVED): Прежде всего, благодаря @John Ament и @OndrejM за их ценные комментарии. В моем первоначальном посте я почти нашел решение. Необходимо учитывать два момента:

1.- При распределении ресурсов как .class обязательно регистрируйтесь в режиме исполнения JAX-RS: ручная загрузка MessageFacadeREST.class является обязательной.

2.- В Netbeans кажется, что опция запуска не переустанавливается правильно (ошибка «Модуль не был развернут»). необходимо использовать вариант развертывания (вместо запуска)

Теперь он работает.

+0

Вы упаковываете приложение в файл WAR? –

+0

есть.Это другая альтернатива. Развертывание WAR работает хорошо, но я предпочел бы выполнить смешанное двоичное (класс)/исходное гибридное приложение – francesc

+0

@John Ament только разъяснение. Если я использую войну из 3-х источников, она работает хорошо, но если я развожу из двух источников и одного файла класса, это не сработает – francesc

ответ

0

Netbeans, возможно, удаляет файлы .class после удаления источников из проекта.

Вы должны скопировать файлы .class в папку, где Netbeans ищет файлы ресурсов.

В классическом веб-проекте Java Netbeans, который будет находиться в папке WEB-INF, по умолчанию web/WEB-INF. Вы также можете скопировать классы в любую другую папку и добавить папку в качестве библиотеки на вкладке «Компиляция» (в диалоговом окне свойств проекта).

Если проект представляет собой проект на основе maven, просто скопируйте папку с классами в папку src/main/resources.