what's the default JTA transaction boundary?
My Environment: Glassfish 4.0, JTA
In my scenario, I've REST layer to provider REST service, a Service layer to handle business, and DAO for data accessing.
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Singleton
public class TestResource {
@EJB
private TestDao dao;
@GET
@Path("/{id}/{key}")
public Test doGet(@PathParam("id") String id, @PathParam("key") String key) {
Test test = dao.find(id);
test.setName(key);
return test;
}
}
DAO to access database:
Stateless
@LocalBean
public class TestDao extends AbstractDAO<Test> {
@PersistenceContext(unitName = "ManagerPU")
private EntityManager entityManager;
public TestDao() {
super(Test.class);
}
@Override
protected EntityManager getEntityManager() {
return entityManager;
}
}
public abstract class AbstractDAO<T> extends AbstractReadDAO<T> {
public AbstractDAO(Class<T> entityClass) {
super(entityClass);
}
/**
* create new entity
*
* @param entity
* @return
*/
public T create(T entity) {
EntityManager em = getEntityManager();
em.persist(entity);
em.flush();
em.refresh(entity, LockModeType.PESSIMISTIC_READ);
return entity;
}
}
@Setter
@Getter
@Entity
@Table(name = "test")
public class Test extends UUIDEntity {
private String name;
}
According to the test result:
insert into test(id, name) values("1", "some");
http://localhost:8080/admin/test/1/newName
{
id: "1",
name: "newName"
}
but record in data isn't changed.
So I think the Test object is detached when returned from TestDao in the TestResource layer.
This confused me when the JTA transaction started and ended.
Aucun commentaire:
Enregistrer un commentaire