raimund@438: /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz raimund@438: * Software engineering by Intevation GmbH raimund@438: * raimund@438: * This file is Free Software under the GNU GPL (v>=3) raimund@438: * and comes with ABSOLUTELY NO WARRANTY! Check out raimund@438: * the documentation coming with IMIS-Labordaten-Application for details. raimund@438: */ raimund@438: package de.intevation.lada.util.data; raimund@438: raimund@438: import javax.annotation.Resource; raimund@438: import javax.ejb.LocalBean; raimund@438: import javax.ejb.SessionContext; raimund@438: import javax.ejb.Stateless; raimund@438: import javax.persistence.EntityManager; raimund@438: import javax.validation.UnexpectedTypeException; raimund@438: raimund@711: /** raimund@711: * Factory class used to get entitymanager for a specific persistence unit. raimund@711: * raimund@711: * @author Raimund Renkert raimund@711: */ raimund@438: @Stateless raimund@438: @LocalBean raimund@438: public class EntityManagerProducer { raimund@438: raimund@438: @Resource raimund@438: private SessionContext ctx; raimund@438: raimund@438: private String jndiPath = "java:app/entitymanager/"; raimund@438: raimund@438: /** raimund@438: * Constructor for multi-tenancy entity manager delegate. raimund@438: * Default jndi search path is 'java:app/entitymanager'. raimund@438: */ raimund@438: public EntityManagerProducer() { raimund@438: } raimund@438: raimund@438: /** raimund@438: * Constructor for multi-tenancy entity manager delegate. raimund@438: * raimund@438: * @param jndiEnv The jndi path to search for datasources. raimund@438: * Defaults to 'java:app/entitymanager'. raimund@438: */ raimund@438: public EntityManagerProducer(String jndiPath) { raimund@438: this.jndiPath = jndiPath; raimund@438: } raimund@438: raimund@438: /** raimund@438: * Create an entity manager for a datasource. raimund@438: * raimund@438: * @throws UnexpectedTypeException raimund@438: * @param dataSourceName The jndi name of the datasource. raimund@438: * @return The entity manager for the datasource. raimund@438: */ raimund@438: public EntityManager entityManager(String dataSourceName) { raimund@438: raimund@438: EntityManager entityManager = raimund@438: (EntityManager) this.ctx.lookup(this.jndiPath + dataSourceName); raimund@438: raimund@438: if (entityManager == null) { raimund@438: throw new UnexpectedTypeException("Unknown data source name '" + raimund@438: dataSourceName + "'."); raimund@438: } raimund@438: raimund@438: return entityManager; raimund@438: raimund@438: } raimund@438: }