【问题标题】:ActiveJDBC not working with Java Jersey's annotationsActiveJDBC 不适用于 Java Jersey 的注解
【发布时间】:2014-07-22 06:16:57
【问题描述】:

我有一个名为 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方法运行正常,但是在同一个类中,当我作为服务器运行它并使用它的方法时,它不起作用?当类中有其他注解时,插桩是否不起作用?

非常感谢您的帮助! :)

【问题讨论】:

    标签: jakarta-ee jersey jetty instrumentation activejdbc


    【解决方案1】:

    我很确定 Jersey 注释与问题无关。两种执行都使用不同的类路径。该消息仅告诉您在应用程序容器中您打包了非仪器类。请确保您正在部署的应用程序包含检测类。另外,另一个观察:您正在打开和关闭业务方法内的连接。这种方法将迫使您编写大量代码。我建议您实现一个 Servlet 过滤器来执行此操作。然后您可以删除所有代码以打开和关闭类中的连接。以下是此类过滤器的示例: https://github.com/javalite/activejdbc/blob/master/activejdbc/src/main/java/org/javalite/activejdbc/web/ActiveJdbcFilter.java

    希望对你有帮助

    【讨论】:

    • 谢谢伊戈尔!这很有意义。问题:我的 gradle 构建文件目前确实是 clean > build > instrument。所以要打包检测类,我是否必须做一个仪器>构建?
    • 这个:gradle clean build jar,应该生成一个带有检测类的 jar 文件
    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多