我有一个名为MiddleTierResources.java的Jersey资源类,它使用Jersey(具有以下相关导入:javax.ws.rs。*; javax.ws.rs.core.MediaType; javax.ws.rs.core.Response ;)
在该课程中,方法注释如下:
@GET
@Path("/users/{userid}")
@Produces({MediaType.APPLICATION_JSON})
public Response getUserById (final @PathParam("userid") String userid) {
Base.open("org.postgresql.Driver", "jdbc:postgresql:app", "user", "pass");
User user = User.findById(Integer.parseInt(userid));
Base.close();
return Response.ok(user).build();
}
我建立&检测模型类,然后启动构建的服务器,当我转到localhost:9090 / users / 1时,出现以下错误:
org.javalite.activejdbc.DBException: failed to determine Model class name,
are you sure models have been instrumented?
然而,奇怪的是,当我自己启动这个类时,它会运行以下Main方法并运行得很好!
public static void main(String[] args){
Base.open("org.postgresql.Driver", "jdbc:postgresql:app", "user", "pass");
User user = User.findById(1);
Base.close();
System.out.println("MAIN SAYS: "+user);
}
并成功打印出来:
MAIN SAYS: Model: com.myproject.application.models.User, table: 'users',
attributes: {wallet_secret=null, id=1, username=Johnny, phone=null,
updated_at=2014-07-16 16:57:30.901, email=null, wallet_address=null,
created_at=2014-07-16 16:57:30.901, password=1234567890, activation=null,
account_type=null}
所以我真的不明白发生了什么?为什么main方法运行正常,但是当我将它作为服务器运行并使用其方法时,它在同一个类中,它不起作用?当类中有其他注释时,检测不起作用吗?
非常感谢你的帮助! :)
答案 0 :(得分:1)
我很确定Jersey注释与问题无关。两个执行都使用不同的类路径。该消息只告诉您在应用程序容器中打包了非检测类。请确保您要部署的应用程序包含已检测的类。另外,另一个观察结果是:您在业务方法中打开和关闭连接。这种方法将迫使您编写大量代码。我建议您实现一个Servlet过滤器来执行此操作。然后您可以删除所有代码以打开和关闭类中的连接。以下是此类过滤器的示例: https://github.com/javalite/activejdbc/blob/master/activejdbc/src/main/java/org/javalite/activejdbc/web/ActiveJdbcFilter.java
我希望它有所帮助