运行时的 EJB3 和 EntityManagerMap

发布于 2024-10-18 06:31:54 字数 2160 浏览 5 评论 0原文

我需要使 EJB3 有状态,以创建 EntityManager 的映射。 我想用它来管理在运行时动态创建的多个数据库。 我在 persistence.xml 部署描述符中定义了一个默认持久性单元。

我的 persistance.xml:(

我使用 Jboss5 并且定义了一个数据源)

   <persistence-unit name="mkyong">
      <jta-data-source>java:/mkyong_jtds</jta-data-source>

        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.max_fetch_depth" value="5" />
            <property name="hibernate.show_sql " value="true" />
            <property name="hibernate.format_sql" value="true" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>

        </properties>
   </persistence-unit>

我需要创建 10 个 EntityManager, 每一个仅与连接 ulr 不同,我需要在运行时定义指定的值。 我想从管理用户界面创建它们。

类似于:

@PersistenceContext(unitName="mkyong")
private EntityManager manager;

Map<String, EntityManager> entityManagerMap = new HashMap<String, EntityManager>();

entityManagerMap.put("mkyong", manager);

Map<String, Object> configOverrides = new HashMap<String, Object>();
configOverrides.put("hibernate.connection.url", "jdbc:jtds:sqlserver://127.0.0.1:1433/Anagrafe");
EntityManagerFactory programmaticEmf =
Persistence.createEntityManagerFactory("mkyong", configOverrides);
manager1=programmaticEmf.createEntityManager();
entityManagerMap.put("Anagrafe", manager1);

在此示例中,我创建了 2 个 EntityManager,

其中一个自动创建的真实 EntityManager 名为“mkyong”。

在运行时创建的一个名为“Anagrafe”的 EntityManager。

...

如果我使用真正的 EntityManager 工作正常...它创建表...它持续存在..

但是如果我尝试使用新的...不工作...它不创建表并且不存储值

为什么?

没有错误...没有日志...只是不要在数据库上写入并且不要创建表


PS:如果我在 persistance.xml 中配置两个持久性单元并且我使用两个注入的实体管理器工作正常。

I need to make an EJB3 stateful which creates a map of EntityManager.
I want use it to manage multy database dynamically created at runtime.
I define one default persistence unit in the persistence.xml deployment descriptor.

my persistance.xml:

(I used Jboss5 and I defined a datasource)

   <persistence-unit name="mkyong">
      <jta-data-source>java:/mkyong_jtds</jta-data-source>

        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.jdbc.batch_size" value="50" />
            <property name="hibernate.max_fetch_depth" value="5" />
            <property name="hibernate.show_sql " value="true" />
            <property name="hibernate.format_sql" value="true" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>

        </properties>
   </persistence-unit>

I need to create 10 EntityManager,
each one differs only from connection ulr and I need to define specified values at runtime.
I want create their from an administrative user interface.

something like:

@PersistenceContext(unitName="mkyong")
private EntityManager manager;

Map<String, EntityManager> entityManagerMap = new HashMap<String, EntityManager>();

entityManagerMap.put("mkyong", manager);

Map<String, Object> configOverrides = new HashMap<String, Object>();
configOverrides.put("hibernate.connection.url", "jdbc:jtds:sqlserver://127.0.0.1:1433/Anagrafe");
EntityManagerFactory programmaticEmf =
Persistence.createEntityManagerFactory("mkyong", configOverrides);
manager1=programmaticEmf.createEntityManager();
entityManagerMap.put("Anagrafe", manager1);

In this sample I created 2 EntityManager

One real EntityManager created automatically named 'mkyong'.

One EntityManager created at runtime named 'Anagrafe'.

...

If I use the real EntityManager work fine... it create table...it persist..

but if i try to use the new one... dont'work... it dont create table and dont store values

Why?

NO ERROR... NO LOG... simply dont write on DB and dont create tables


PS: If I config two persistence-unit inside persistance.xml and I use two injected entity manager work fine.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文