in openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java [401:523]
public static Map toOpenJPAProperties(PersistenceUnitInfo info) {
Map map = new HashMap<String,Object>();
Set<String> added = new HashSet<>();
if (info.getTransactionType() == PersistenceUnitTransactionType.JTA)
replaceAsOpenJPAProperty(map, added, "TransactionMode", "managed");
boolean hasJta = false;
DataSource ds = info.getJtaDataSource();
if (ds != null) {
replaceAsOpenJPAProperty(map, added, "ConnectionFactory", ds);
replaceAsOpenJPAProperty(map, added, "ConnectionFactoryMode", "managed");
hasJta = true;
} else if (info instanceof PersistenceUnitInfoImpl
&& ((PersistenceUnitInfoImpl) info).getJtaDataSourceName() != null){
replaceAsOpenJPAProperty(map, added, "ConnectionFactoryName",
((PersistenceUnitInfoImpl)info).getJtaDataSourceName());
replaceAsOpenJPAProperty(map, added, "ConnectionFactoryMode", "managed");
hasJta = true;
}
ds = info.getNonJtaDataSource();
if (ds != null) {
replaceAsOpenJPAProperty(map, added, hasJta ? "ConnectionFactory2" : "ConnectionFactory", ds);
} else if (info instanceof PersistenceUnitInfoImpl
&& ((PersistenceUnitInfoImpl) info).getNonJtaDataSourceName() != null) {
String nonJtaName = ((PersistenceUnitInfoImpl) info).getNonJtaDataSourceName();
replaceAsOpenJPAProperty(map, added, hasJta ? "ConnectionFactory2Name" : "ConnectionFactoryName",
nonJtaName);
}
if (info.getClassLoader() != null)
replaceAsOpenJPAProperty(map, added, "ClassResolver", new ClassResolverImpl(info.getClassLoader()));
Properties props = info.getProperties();
if (props != null) {
// remove any of the things that were set above
for (String key : added) {
if (Configurations.containsProperty(key, props))
Configurations.removeProperty(key, props);
}
// add all the non-conflicting props in the <properties> section
map.putAll(props);
// this isn't a real config property; remove it
map.remove(PersistenceProviderImpl.CLASS_TRANSFORMER_OPTIONS);
}
if (!Configurations.containsProperty("Id", map))
map.put("openjpa.Id", info.getPersistenceUnitName());
Properties metaFactoryProps = new Properties();
if (info.getManagedClassNames() != null
&& !info.getManagedClassNames().isEmpty()) {
StringBuilder types = new StringBuilder();
for (String type : info.getManagedClassNames()) {
if (types.length() > 0)
types.append(';');
types.append(type);
}
metaFactoryProps.put("Types", types.toString());
}
if (info.getJarFileUrls() != null && !info.getJarFileUrls().isEmpty()
|| (!info.excludeUnlistedClasses()
&& info.getPersistenceUnitRootUrl() != null)) {
StringBuilder jars = new StringBuilder();
String file = null;
if (!info.excludeUnlistedClasses()
&& info.getPersistenceUnitRootUrl() != null) {
URL url = info.getPersistenceUnitRootUrl();
if ("file".equals(url.getProtocol())) // exploded jar?
file = URLDecoder.decode(url.getPath());
else
jars.append(url);
}
for (URL jar : info.getJarFileUrls()) {
if (jars.length() > 0)
jars.append(';');
jars.append(jar);
}
if (file != null)
metaFactoryProps.put("Files", file);
if (jars.length() != 0)
metaFactoryProps.put("URLs", jars.toString());
}
if (info.getMappingFileNames() != null
&& !info.getMappingFileNames().isEmpty()) {
StringBuilder rsrcs = new StringBuilder();
for (String rsrc : info.getMappingFileNames()) {
if (rsrcs.length() > 0)
rsrcs.append(';');
rsrcs.append(rsrc);
}
metaFactoryProps.put("Resources", rsrcs.toString());
}
// set persistent class locations as properties of metadata factory,
// combining them with any existing metadata factory props
if (!metaFactoryProps.isEmpty()) {
String key = ProductDerivations.getConfigurationKey
("MetaDataFactory", map);
map.put(key, Configurations.combinePlugins((String) map.get(key),
Configurations.serializeProperties(metaFactoryProps)));
}
// always record provider name for product derivations to access
if (info.getPersistenceProviderClassName() != null)
map.put(JPAProperties.PROVIDER, info.getPersistenceProviderClassName());
// convert validation-mode enum to a StringValue
if (info.getValidationMode() != null)
map.put(JPAProperties.VALIDATE_MODE, info.getValidationMode());
if (info.getPersistenceXMLSchemaVersion() != null) {
map.put(PERSISTENCE_VERSION, info.getPersistenceXMLSchemaVersion());
}
if (info.getSharedCacheMode() != null) {
map.put(JPAProperties.CACHE_MODE, info.getSharedCacheMode());
}
return map;
}