/******************************************************************************* * Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Guy Pelletier, Doug Clarke - initial API and implementation ******************************************************************************/ package org.eclipse.persistence.internal.jpa.config.persistenceunit; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Properties; import javax.persistence.spi.PersistenceUnitInfo; import javax.persistence.spi.PersistenceUnitTransactionType; import org.eclipse.persistence.config.PersistenceUnitProperties; import org.eclipse.persistence.internal.jpa.config.xml.MappingsImpl; import org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor; import org.eclipse.persistence.internal.jpa.deployment.SEPersistenceUnitInfo; import org.eclipse.persistence.internal.jpa.metadata.xml.XMLEntityMappings; import org.eclipse.persistence.jpa.config.Mappings; import org.eclipse.persistence.jpa.config.PersistenceUnit; /** * JPA scripting API implementation. * * @author Guy Pelletier * @since EclipseLink 2.5.1 */ public class PersistenceUnitImpl implements PersistenceUnit { private SEPersistenceUnitInfo puInfo; private List<Mappings> mappings = new ArrayList<Mappings>(); public PersistenceUnitImpl(String name, ClassLoader cl) { puInfo = new SEPersistenceUnitInfo(); puInfo.setClassLoader(cl == null ? Thread.currentThread().getContextClassLoader() : cl); String persistenceFactoryResource = PersistenceUnitImpl.class.getName().replace('.', '/') + ".class"; URL puURL = PersistenceUnitImpl.class.getClassLoader().getResource(persistenceFactoryResource); try{ puURL = PersistenceUnitProcessor.computePURootURL(puURL, persistenceFactoryResource); } catch (URISyntaxException e){ e.printStackTrace(); } catch (IOException e){ e.printStackTrace(); } puInfo.setPersistenceUnitRootUrl(puURL); puInfo.setProperties(new Properties()); setName(name); setTransactionType(PersistenceUnitTransactionType.RESOURCE_LOCAL); setProperty(PersistenceUnitProperties.SESSION_NAME, name); } public PersistenceUnitImpl(String name) { this(name, null); } public Mappings addMappings() { Mappings mappings = new MappingsImpl(); this.mappings.add(mappings); return mappings; } public ClassLoader getClassLoader() { return puInfo.getClassLoader(); } public PersistenceUnitInfo getPersistenceUnitInfo() { return puInfo; } public XMLEntityMappings getMappings() { return ((MappingsImpl) mappings.get(0)).getMetadata(); } public String getName() { return puInfo.getPersistenceUnitName(); } public PersistenceUnit setClass(String cls) { puInfo.getManagedClassNames().add(cls); return this; } public PersistenceUnit setExcludeUnlistedClasses(Boolean excludeUnlistedClasses) { puInfo.setExcludeUnlistedClasses(excludeUnlistedClasses); return this; } public PersistenceUnit setJarFile(String jarFile) { puInfo.getJarFiles().add(jarFile); return this; } public PersistenceUnit setJtaDataSource(String jtaDataSource) { setProperty(PersistenceUnitProperties.JTA_DATASOURCE, jtaDataSource); return this; } public PersistenceUnit setMappingFile(String mappingFile) { puInfo.getMappingFileNames().add(mappingFile); return this; } public PersistenceUnit setName(String name) { puInfo.setPersistenceUnitName(name); return this; } public PersistenceUnit setNonJtaDataSource(String nonJtaDataSource) { setProperty(PersistenceUnitProperties.NON_JTA_DATASOURCE, nonJtaDataSource); return this; } public PersistenceUnit setProperty(String name, Object value) { puInfo.getProperties().put(name, value); return this; } public PersistenceUnit setProvider(String provider) { puInfo.setPersistenceProviderClassName(provider); return this; } public PersistenceUnit setSharedCacheMode(String sharedCacheMode) { puInfo.setSharedCacheMode(sharedCacheMode); return this; } public PersistenceUnit setTransactionType(PersistenceUnitTransactionType transactionType) { puInfo.setTransactionType(transactionType); return this; } public PersistenceUnit setValidationMode(String validationMode) { puInfo.setValidationMode(validationMode); return this; } }