Methods Summary |
---|
public static javax.persistence.EntityManagerFactory | createEntityManagerFactory(java.lang.String persistenceUnitName)Create and return an EntityManagerFactory for the
named persistence unit.
return createEntityManagerFactory(persistenceUnitName, null);
|
public static javax.persistence.EntityManagerFactory | createEntityManagerFactory(java.lang.String persistenceUnitName, java.util.Map properties)Create and return an EntityManagerFactory for the
named persistence unit using the given properties.
EntityManagerFactory emf = null;
Set<PersistenceProvider> providersFound = null;
try{
providersFound = findAllProviders();
} catch (IOException exc){};
Map<String, String> errors = new HashMap<String, String>();
Set<String> returnedNull = new HashSet<String>();
for (PersistenceProvider provider : providersFound) {
try {
emf = provider.createEntityManagerFactory(persistenceUnitName, properties);
if (emf != null) {
break;
} else {
returnedNull.add(provider.getClass().getName());
}
} catch (Throwable t) {
// ignore : according to Spec the provider must return null from
// createEntityManagerFactory(), if not the right provider.
// But non-compliant provider may throw exception
errors.put(provider.getClass().getName(), createErrorMessage(t));
}
}
if (emf == null) {
StringBuffer message = new StringBuffer(
"No Persistence provider for EntityManager named " +
persistenceUnitName + ": ");
if (!exists(PERSISTENCE_XML_NAME)) {
message.append (" No META-INF/persistence.xml was found in classpath.\n");
} else {
Map<String, String> reasons = getReasons();
for (Map.Entry me: reasons.entrySet()) {
message.append("Provider named ");
message.append(me.getKey());
message.append(" threw exception at initialization: ");
message.append(me.getValue() + "\n");
}
for (Map.Entry me: errors.entrySet()) {
message.append("Provider named ");
message.append(me.getKey());
message.append(" threw unexpected exception at create EntityManagerFactory: \n");
message.append(me.getValue() + "\n");
}
if (!returnedNull.isEmpty()) {
message.append(" The following providers:\n");
for (String n: returnedNull) {
message.append(n + "\n");
}
message.append("Returned null to createEntityManagerFactory.\n");
}
}
throw new PersistenceException(message.toString());
}
return emf;
|
private static java.lang.String | createErrorMessage(java.lang.Throwable t)
StringWriter errorMessage = new StringWriter();
errorMessage.append(t.getClass().getName()).append("\r\n");
t.printStackTrace(new PrintWriter(errorMessage));
errorMessage.append("\r\n");
return errorMessage.toString();
|
private static boolean | exists(java.lang.String fileName)
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Enumeration<URL> resources;
try {
resources = loader.getResources(fileName);
} catch (IOException ex) {
resources = null;
}
return resources==null? false : resources.hasMoreElements();
|
private static java.util.Set | findAllProviders()
HashSet<PersistenceProvider> providersFound = new HashSet<PersistenceProvider>();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Enumeration<URL> resources = loader.getResources(SERVICE_NAME);
if (!resources.hasMoreElements()) {
throw new PersistenceException("No resource files named " + SERVICE_NAME
+ " were found. Please make sure that the persistence provider jar file is in your classpath.");
}
Set<String> names = new HashSet<String>();
while (resources.hasMoreElements()) {
URL url = resources.nextElement();
InputStream is = url.openStream();
try {
names.addAll(providerNamesFromReader(new BufferedReader(new InputStreamReader(is))));
} finally {
is.close();
}
}
if (names.isEmpty()) {
throw new PersistenceException("No provider names were found in " + SERVICE_NAME);
}
for (String s : names) {
try{
providersFound.add((PersistenceProvider)loader.loadClass(s).newInstance());
} catch (ClassNotFoundException exc){
} catch (InstantiationException exc){
} catch (IllegalAccessException exc){
}
}
return providersFound;
|
private static java.util.Map | getReasons()
Map<String, String> reasons = new HashMap<String, String>();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Set<String> names = new HashSet<String>();
try {
Enumeration<URL> resources = loader.getResources(SERVICE_NAME);
while (resources.hasMoreElements()) {
URL url = resources.nextElement();
InputStream is = url.openStream();
try {
names.addAll(providerNamesFromReader(new BufferedReader(new InputStreamReader(is))));
} finally {
is.close();
}
}
} catch (IOException exc){};
for (String s : names) {
try{
loader.loadClass(s).newInstance();
} catch (ClassNotFoundException exc){
reasons.put(s, exc.getClass().getName() + " " + exc.getMessage());
} catch (InstantiationException exc){
reasons.put(s, createErrorMessage(exc));
} catch (IllegalAccessException exc){
reasons.put(s, createErrorMessage(exc));
} catch (RuntimeException exc){
reasons.put(s, createErrorMessage(exc));
}
}
return reasons;
|
private static java.util.Set | providerNamesFromReader(java.io.BufferedReader reader)
Set<String> names = new HashSet<String>();
String line;
while ((line = reader.readLine()) != null) {
line = line.trim();
Matcher m = nonCommentPattern.matcher(line);
if (m.find()) {
names.add(m.group().trim());
}
}
return names;
|