Ich habe in Java unter Verwendung von JAX-RS (Resteasy) und JPA (Hibernate) auf Wildfly 10.Entity Sperr Ausgabe in JAX-RS + JPA
Manchmal eine GET-Recht eine REST-JSON-API geschrieben Einsatz nach Ein POST dauert einige Minuten und ich erhalte mehrere Warnungen/Fehler im Protokoll.
Hier einige Code:
@Stateless
@Path("/articles")
public class ArticleResource {
@PersistenceContext
private EntityManager em;
@POST
@Consumes("application/json")
public Response post(Article article) {
this.em.persist(article);
URI location = UriBuilder.fromUri("/articles/{id}").build(article.getId());
return Response.created(location).build();
}
@GET
@Path("/{id}")
@Produces("application/json")
public Article get(@PathParam("id") Long id) {
return this.em.find(Article.class, id);
}
}
Dann, wenn ich dies tun:
$ curl -i -X POST --data @article.json http://localhost/articles
ich diesen Ausgang sofort erhalten:
HTTP/1.1 201 Created
...
Location: http://localhost/articles/123
und wenn ich ausgeben sofort curl http://localhost/articles/123
, manchmal dauert es 4-6 Minuten, um zurückzukehren n die JSON, und in den Protokollen sehe ich:
ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (EJB default - 4)
IJ031012: Unable to obtain lock in 60 seconds: org.jboss.jca.adapters.jdbc.local.LocalManagedConnection
Erstens: warum es versucht, nur für einen SELECT
eine Sperre zu bekommen? Ich denke, die Sperre ist vor Aufruf der EntityManager.find
Methode, so wie kann ich die ArticleResource.get
Methode annotieren, um den Container anzuweisen, keine Sperre anfordern?
Zweitens: warum die Sperre (die vermutlich von der vorherigen POST
Anfrage gesetzt wurde) wird nicht freigegeben, wenn die POST
Antwort festgeschrieben ist?
Vielen Dank, ich meine API '@ Stateless' DAOs und injizieren sie in die REST-Services machen Refactoring. –