Problems with EntityManagerFactory
qualitha May 12, 2006 5:06 AMHello,
I am currently trying to override the settings in the persistence.xml dynamically with my own hashmap. The background is, that I want to change the datasource dynamically depending on where to persist the Entity.
Unfortunatley the factory does not seem to care for any values, that I am trying to override. Did I miss anything?
My current code is as follows:
@Stateless public class EJB3CampaignDAO extends EJB3BaseDAO implements CampaignDAO { @PersistenceUnit(unitName="testPersdb") EntityManagerFactory emf; ..... public datacontainer.Campaign findSingleCampaign ( int id) { java.util.Map configOverride = new HashMap(); configOverride.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence"); configOverride.put("javax.persistence.transactionType", "JTA"); configOverride.put("javax.persistence.jtaDataSource", "anotherDatasource_ccDS"); EntityManager manager = emf.createEntityManager(configOverride);
And my persistence.xml looks like this
<?xml version="1.0" encoding="UTF-8"?> <persistence> <persistence-unit name="testPersdb" transaction-type="JTA"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/aDatasource_ccDS</jta-data-source> <class>persistence.ejb3.entity.EJB3Campaign</class> </persistence-unit> </persistence>
If I´m trying to override the setting while creating the EntityManagerFactory I get a very unexpected ClassCastException. So this way does not seem to work either
@Stateless public class EJB3CampaignDAO extends EJB3BaseDAO implements CampaignDAO { @PersistenceContext(unitName="testPersdb") private EntityManager manager; public datacontainer.Campaign findSingleCampaign ( int id) { System.out.println("findSingleCampaign " + id); java.util.Map configOverride = new HashMap(); configOverride.put("javax.persistence.provider", "org.hibernate.ejb.HibernatePersistence"); configOverride.put("javax.persistence.transactionType", "JTA"); configOverride.put("javax.persistence.jtaDataSource", "anotherDatasource_ccDS"); EntityManagerFactory emf = Persistence.createEntityManagerFactory("testPersdb", configOverride); emf = Persistence.createEntityManagerFactory("testPersdb", configOverride); manager = emf.createEntityManager();
This is how the Exception looks like
javax.ejb.EJBTransactionRolledbackException: javax.persistence.PersistenceException: java.lang.ClassCastException: java.lang.String; nested exception is: javax.persistence.PersistenceException: java.lang.ClassCastException: java.lang.String javax.persistence.PersistenceException: java.lang.ClassCastException: java.lang.String at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:188) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:110) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
Is there anything wrong in the code or am I thinking totally wrong? Or is this just a bug in the JBOSS EJB3-Implementation?
Any help is greatly appriciated
THank you