我编写了一个非常简单的聊天JAX-RS应用程序,该应用程序在Netbeans中使用glassfish 4.1进行部署,具有以下来源:
practica2/Message.java // entity from MySQL DataBase
practica2/service/AbstractFacade.java
ApplicationConfig.java
MessageFacadeREST.java // resource class
这些源文件是针对具有以下属性的MySQL数据库消息从Netbeans的“数据库RESTful Web服务”向导执行的:
- 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
}
服务器运行良好,聊天客户端(主要是android)创建和检索服务器的消息。
由于我的学生必须完成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应用程序?
(解决): 首先,感谢@John Ament和@OndrejM的宝贵意见。在我原来的帖子中,我几乎找到了解决方案。要考虑两点:
1.-在将资源分配为.class时,请确保注册到JAX-RS运行时:必须手动加载MessageFacadeREST.class
。
2.-在Netbeans中,似乎运行选项未正确重新部署('模块尚未部署'错误)。必须使用部署选项(而不是运行)
现在可行。
答案 0 :(得分:0)
Netbeans可能会在您从项目中删除源文件后删除.class
文件。
您必须将.class
文件复制到Netbeans搜索资源文件的文件夹中。
在经典的Netbeans Java Web项目中,默认情况下WEB-INF
位于web/WEB-INF
文件夹中src/main/resources
。您还可以将类复制到任何其他文件夹,并在“编译”选项卡(在项目属性对话框中)中将文件夹添加为库。
如果项目是基于maven的项目,只需将带有类的文件夹复制到char
文件夹中。