EJB3 и EntityManagerMap во время выполнения - PullRequest
1 голос
/ 19 февраля 2011

Мне нужно сделать EJB3 с состоянием, который создает карту EntityManager. Я хочу использовать его для управления многопользовательской базой данных, динамически создаваемой во время выполнения. Я определяю один постоянный модуль по умолчанию в дескрипторе развертывания persistence.xml.

my 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.

Один EntityManager, созданный во время выполнения с именем Anagrafe.

...

Если я использую настоящий EntityManager, он отлично работает ... он создает таблицу ... он сохраняется ..

но если я попытаюсь использовать новый ... dont'work ... он не создает таблицу и не сохраняет значения

Почему?

NO ERROR ... NO LOG ... просто не пишите в БД и не создавайте таблицы


PS: если я сконфигурирую два модуля персистентности внутри файла persistance.xml и использую два внедренных менеджера сущностей, все будет работать нормально.

...