运行时的 EJB3 和 EntityManagerMap
我需要使 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论