Hi Team,
I have a simple code below using quarkus and reactive panache.
<quarkus-plugin.version>1.13.1.Final</quarkus-plugin.version>
<quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
<quarkus.platform.version>1.13.1.Final</quarkus.platform.version>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-reactive-panache</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-reactive</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-reactive-pg-client</artifactId>
</dependency>
And this is the sample code.
public Uni<Account> fetchUserAccount(String username){
return Account.find("username",username).firstResult();
}
public Uni<Account> process(final String username,
final Person person,
final TransactionType transactionType){
return this.fetchUserAccount(username);
// .onItem().transform(acc-> {
// //if user exists then mark status as Update; else, Registration
// if(isTransactionTypeMatched(transactionType, acc)){
//// throw new TransactionMismatch("Transaction mismatch detected!");
// }
// //create kie model before calling the rule engine
// return initializeKieModel(person, transactionType, acc);
// })
// .onItem().transform(x-> {
// log.info("business pojo {}",x.toString());
//// this.kieService.invokeKieSession(x);
// return null;
// });
}
@POST
@Path("/get")
public Uni<Response> test(Person person){
String username = person.getFirstName();
return this.registrationService.process(username,person, TransactionType.Registration)
.onItem().transform(x-> Response.accepted().build())
.onFailure().recoverWithItem(err->{
if(err instanceof TransactionException){
return Response.status(406,
((TransactionMismatch) err).getMessage()).build();
}
//other wise throw 500 for other error(s)
return Response.status(500,err.toString()).build();
});
}
On the first try It was okay, But whenever i tried hitting the same endpoint again it says the below error.
2021-04-20 04:32:39,926 ERROR [org.hib.rea.errors] (vert.x-eventloop-thread-9) could not load an entity: [org.eservice.model.Account#1]: java.util.concurrent.Compl
etionException: java.lang.IllegalStateException: Session/EntityManager is closed
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1081)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
at org.hibernate.reactive.pool.impl.Handlers.lambda$toCompletionStage$0(Handlers.java:26)
at io.vertx.sqlclient.impl.SqlResultHandler.complete(SqlResultHandler.java:98)
at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:87)
at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:33)
at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:241)
at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:88)
at io.vertx.core.net.impl.NetSocketImpl.lambda$new$1(NetSocketImpl.java:97)
at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:237)
at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:127)
at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:356)
Wondering why it has happened.
Thanks,
Jayson