运行时的EJB3和EntityManagerMap

时间:2011-02-18 22:36:55

标签: java jboss ejb entitymanager

我需要创建一个EJB3有状态,它创建一个EntityManager映射。 我想用它来管理在运行时动态创建的multy数据库。 我在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工作正常...它创建表...它仍然存在..

但如果我尝试使用新的......不要工作......它不会创建表格而不会存储值

为什么?

没有错误......没有记录......根本就不要在DB上写,也不要创建表


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

0 个答案:

没有答案