簡體   English   中英

ActiveJDBC無法與Java Jersey的注釋一起使用

[英]ActiveJDBC not working with Java Jersey's annotations

我有一個稱為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方法可以正常運行,但是當我將其作為服務器運行並使用其方法時,在同一類中卻無法正常工作? 當類中還有其他注釋時,檢測不起作用嗎?

非常感謝您的幫助! :)

我很確定Jersey注釋與該問題無關。 兩種執行都使用不同的類路徑。 該消息僅告訴您在應用容器中打包了非儀表類。 請確保您要部署的應用程序包含檢測類。 另外,另一個觀察結果是:您正在業務方法內部打開和關閉連接。 這種方法將迫使您編寫大量代碼。我建議您實現一個Servlet篩選器來執行此操作。然后,您可以刪除所有代碼以從類中打開和關閉連接。 這是此類過濾器的示例: https : //github.com/javalite/activejdbc/blob/master/activejdbc/src/main/java/org/javalite/activejdbc/web/ActiveJdbcFilter.java

希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM