我正在使用 EJB/JPA,并且创建了一个名为 createDataset 的静态方法,该方法将查找 Dataset 对象。每次我必须插入、更新、删除等实体时,我都会调用 DatasetFactory.createDataset() 检索 DatasetObject,然后调用适当的方法(插入、更新等)。
代码:
public class DatasetFactory {
public static Dataset createDataset() {
try {
return (Dataset) new InitialContext().lookup("java:global/.../Dataset");
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
public interface Dataset<T> {
void insert(T entity);
//...
}
@Stateless
@EJB(name = "java:global/.../Dataset", beanInterface = Dataset.class)
public class DatasetBean<T> implements Dataset<T> {
@PersistenceContext(type = PersistenceContextType.TRANSACTION)
private EntityManager entityManager;
@Override
public void insert(T entity) {
entityManager.persist(entity);
}
//...
}
使用这种方法可能会遇到线程安全问题吗?如果是这样,我应该做哪些修改?我应该将同步修饰符放在 DatasetFactory.createDataset() 中吗?
非常感谢!
最佳答案
您不必同步 EJB 的任何方法,因为 EJB 规范指定 EJB 实例不得由两个并发线程调用。 EJB 容器为您处理同步和线程安全。这是使用 EJB 的要点之一。
关于java - 使用这种方法会遇到线程安全问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772701/