java - 使用这种方法会遇到线程安全问题吗?

标签 java hibernate jpa thread-safety ejb

我正在使用 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/

相关文章:

mysql - EntityManager merge() 导致重复行

java - 如何解决重复条目 : com/google/gson/JsonParseException. 类?

java - 如何在具有一对多关系的 map 中进行标注?

hibernate - java.lang.NoSuchMethodError : javax/persistence/spi/PersistenceUnitInfo. getValidationMode()Ljavax/persistence/ValidationMode

postgresql - 使用实体中的默认值与 PostgreSQL hibernate

java - Hibernate 谓词 - 无效路径

java - JPA 和数据库在一个 jar 中

java - @SelectProvider中mybatis参数替换是如何工作的

java - mvn 测试未找到 junit 测试

java - 运行我的应用程序的 EntityManager 没有持久性提供程序