Я запрограммировал очень простой чат приложение 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 кажется, что опция запуска не переустанавливается правильно (ошибка «Модуль не был развернут»). необходимо использовать вариант развертывания (вместо запуска)
Теперь он работает.
Вы упаковываете приложение в файл WAR? –
есть.Это другая альтернатива. Развертывание WAR работает хорошо, но я предпочел бы выполнить смешанное двоичное (класс)/исходное гибридное приложение – francesc
@John Ament только разъяснение. Если я использую войну из 3-х источников, она работает хорошо, но если я развожу из двух источников и одного файла класса, это не сработает – francesc