在应用程序运行时更改jta-data-source

时间:2016-12-09 20:12:54

标签: eclipselink cdi wildfly jta

我需要在运行时在我的应用程序上动态切换数据库。所以这个类要生成我自己的实体管理器:

@ApplicationScoped
public class ApplicationResources {

    @PersistenceContext
    private EntityManager entityManager;

    @Produces
    @Default
    @RequestScoped
    public EntityManager produceEntityManager() {
        Map<Object, Object> props = new HashMap<Object, Object>();
        props.put(PersistenceUnitProperties.JTA_DATASOURCE, DATABASENAME);
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PU", props);
        return  entityManagerFactory.createEntityManager();
    }

    public void dispose(@Disposes EntityManager entityManager) {
        entityManager.close();
    }
}

所以我使用@Inject获取entityManager并对数据库执行所有持久性操作。我有两个问题:

  • 当我更改jta-data-source时,Eclipselink需要花费大量时间进行连接。并再次运行所有验证(如在应用程序启动时)。我需要更快地更改连接。
  • 我登录时无法保存或更新对象。我可以更新并全部获取它们(对象)。

我用这种方法看似简单。因为我的申请已经很大了。现在我需要其他数据库中的多个客户端。帮帮我..也许这可能是非常错误的,但是eclipselink的多租户方法似乎非常复杂。我需要多租户的想法和一堆不同的数据。但是,如果我只能在我想要的时间和地点更改连接的数据库,那么它将解决很多问题。

我正在使用Wildfly Server,CDI,Eclipselink,JTA和JSF。

感谢您的帮助。

0 个答案:

没有答案