我正在嘗試呼叫一個反應式休息,但在呼叫時,我必須在其中呼叫另一個請求,并創建一些檔案夾,但quarkus-hibernate-reactive顯示以下錯誤,什么是最佳做法?
Error:
原因是:java.lang.IllegalStateException。當前執行緒不能被阻塞:vert.x-eventloop-thread-2。
at io.smallrye.mutiny.operators.UniBlockingAwait.await(UniBlockingAwait.java:29)
我的代碼如下:
@POST
@javax.ws.rs.Path("/add"/span>)
@Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
public Uni< Response> addUser(@HeaderParam("userName") String addedBy) throws Exception{
//Here I have one if condition which is checking from database if user exist!
if (checkUser(addedBy).await().indefinitely().intValue() > 0) {
//then creatingfolders
if (createFolders(addedBy) > 0) {
UserBean u = new UserBean(addedBy)。
return Uni.createFrom().item(userRepository.addUser(u)).onItem().transform(f -> f != null ? Response.ok(f) : Response.ok(null)
.onItem().transform(ResponseBuilder::build)。
}
}
}
public Uni<Long> addUser(UserBean userIN) {
return Panache.withTransaction(userIN::persist)
.replaceWith(userIN.getId() )。
}
我們如何讓它等待創建檔案夾和檢查用戶存在的完成?我已經嘗試使用@Blocking,但它沒有起作用。請幫助我們
。uj5u.com熱心網友回復:
你應該改用普通的Hibernate ORM,而不是Hibernate Reactive,或者以反應式的方式將這些操作連鎖起來。
不要再做
checkUser(addedBy).await().indefinitely().intValue()這樣做:
checkUser(addedBy).onItem().transformToUni(count -> {
....
})
uj5u.com熱心網友回復:
你提到你已經嘗試了阻塞注解,但你使用的是正確的注解嗎?我相信有兩個注解,但只有一個能用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309838.html
標籤:
上一篇:復合主鍵與多主鍵
