JPA EntityManagerFactory
2013-01-28 10:29
731 查看
在使用JPA时,首先要通过Persistence.createEntityManagerFactory创建一个EntityManagerFactory。
对于javax.persistence.Persistence,首先要找到provider,
public static EntityManagerFactory createEntityManagerFactory(
String persistenceUnitName, Map properties) {
EntityManagerFactory emf = null;
if (providers.size() == 0) {
try{
findAllProviders();
} catch (IOException exc){};
}
for (PersistenceProvider provider : providers) {
emf = provider.createEntityManagerFactory(persistenceUnitName, properties);
if (emf != null){
break;
}
}
if (emf == null) {
throw new PersistenceException("No Persistence provider for EntityManager named " + persistenceUnitName);
}
return emf;
}
private static void findAllProviders() throws IOException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Enumeration<URL> resources =
loader.getResources("META-INF/services/" + PersistenceProvider.class.getName());
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();
}
}
for (String s : names) {
try{
providers.add((PersistenceProvider)loader.loadClass(s).newInstance());
} catch (ClassNotFoundException exc){
} catch (InstantiationException exc){
} catch (IllegalAccessException exc){
}
}
}
即首先通过当前线程上下文类加载器去加载META-INF/services/javax.persistence.spi.PersistenceProvider这个文件,进而加载里面的类,例如org.datanucleus.api.jpa.PersistenceProviderImpl ,然后去调用这个provider的createEntityManagerFactory 方法来生成EntityManagerFactory实例。
对于javax.persistence.Persistence,首先要找到provider,
public static EntityManagerFactory createEntityManagerFactory(
String persistenceUnitName, Map properties) {
EntityManagerFactory emf = null;
if (providers.size() == 0) {
try{
findAllProviders();
} catch (IOException exc){};
}
for (PersistenceProvider provider : providers) {
emf = provider.createEntityManagerFactory(persistenceUnitName, properties);
if (emf != null){
break;
}
}
if (emf == null) {
throw new PersistenceException("No Persistence provider for EntityManager named " + persistenceUnitName);
}
return emf;
}
private static void findAllProviders() throws IOException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Enumeration<URL> resources =
loader.getResources("META-INF/services/" + PersistenceProvider.class.getName());
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();
}
}
for (String s : names) {
try{
providers.add((PersistenceProvider)loader.loadClass(s).newInstance());
} catch (ClassNotFoundException exc){
} catch (InstantiationException exc){
} catch (IllegalAccessException exc){
}
}
}
即首先通过当前线程上下文类加载器去加载META-INF/services/javax.persistence.spi.PersistenceProvider这个文件,进而加载里面的类,例如org.datanucleus.api.jpa.PersistenceProviderImpl ,然后去调用这个provider的createEntityManagerFactory 方法来生成EntityManagerFactory实例。
相关文章推荐
- JPA--Caused by: javax.persistence.PersistenceException: [PersistenceUnit: mysqlJPA] Unable to configure EntityManagerFactory
- 解决集成jpa时无法创建entityManagerFactory的问题
- How to use JPA from a JBoss Web application ?(jboss 中如何使用线程安全的EntityManagerFactory )
- JPA EntityManagerFactory Vs Hibernate' SessionFactory
- 在Spring环境中建立JPA Spring JPA 提供了三种方法创建JPA EntityManagerFactory:
- Spring三种方法创建JPA EntityManagerFactory的方法
- JPA EntityManagerFactory Vs Hibernate’s SessionFactory
- jpa--5.api(Persistence,EntityManagerFactory)
- JPA entityManagerFactory配置详解
- jpa动态创建EntityManagerFactory 态设置数据库连接 EntityManager;
- JPA+Spring下,applicationContext.xml中的entityManagerFactory中的class设置问题
- JPA与Spring2.5整合时发生不能创建entityManagerFactory的问题解决方法
- JPA+Spring下,applicationContext.xml中的entityManagerFactory中的class设置问题
- SPRING IN ACTION 第4版笔记-第十一章Persisting data with object-relational mapping-002设置JPA的EntityManagerFactory(<persistence-unit>、<jee:jndi-lookup>)
- JPA:LocalContainerEntityManagerFactoryBean与LocalEntityManagerFactoryBean的区别
- JPA EntityManagerFactory Vs Hibernate’s SessionFactory
- JPA 实体管理器工厂(EntityManagerFactory)
- JPA 学习篇(三)简单实体映射和EntityManagerAPI
- spring生成EntityManagerFactory的三种方式
- JPA EntityManager详解