GVKun编程网logo

PersistenceUnit与PersistenceContext

26

这篇文章主要围绕PersistenceUnit与PersistenceContext展开,旨在为您提供一份详细的参考资料。我们将全面介绍PersistenceUnit与PersistenceConte

这篇文章主要围绕PersistenceUnit与PersistenceContext展开,旨在为您提供一份详细的参考资料。我们将全面介绍PersistenceUnit与PersistenceContext,同时也会为您带来CDH报错:PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory、Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persi...、glassfish +jersey 用 @PersistenceContext 无法获得注入的 EntityManager、javax.persistence.PersistenceContextType的实例源码的实用方法。

本文目录一览:

PersistenceUnit与PersistenceContext

PersistenceUnit与PersistenceContext

在几个项目中,我已成功使用

@PersistenceUnit(unitName = "MiddlewareJPA")EntityManagerFactory emf;...EntityManager entityManager = emf.createEntityManager();

获取EntityManager数据库连接,但是几天前,我试图将项目移至Jboss EAP6.2,但无法创建EntityManager。我在搜索它,发现应该尝试更改@PersistenceUnit

@PersistenceContext(unitName = "MiddlewareJPA")private EntityManager entityManager;

获得 EntityManager 。它有效,但我不知道为什么。有什么区别bettween
PersistenceUnitPersistenceContext?每个优点和缺点是什么?我们应该在哪里使用其中之一?

答案1

小编典典

我不知道它在Java
EE中是如何工作的,但是在Spring中,当您指定@PersistenceContext批注时,它会注入EntityManager。它从哪里得到EntityManagerEntityManager通过调用在整个应用程序生命周期内创建一个是错误的EntityManagerFactory.createEntityManager()。因此,改为EntityManager使用接口的特殊实现并直接实例化。它具有对
real 的内部可变线程局部引用EntityManager。方法的实现只是将调用重定向到此 real
EntityManager。并且有一个servlet侦听器,该侦听器在每个请求之前EM通过调用获取EMF.createEntityManager()并将其分配给special的内部引用EM。另外这款监听器调用管理事务getTransaction().begin().commit().rollback()
实际 EM。这是对已完成工作的非常简化的描述。而且我相信,JEE容器的作用与Spring相同。

在一般情况下,最好注入EntityManager,因为和一起EntityManagerFactory@PersistenceUnit您也应该EntityManager每次都手动创建/销毁并管理事务。

CDH报错:PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory

CDH报错:PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory

1.在启动CDH中master的服务cloudera-scm-server start并立刻挂掉了,提示如下错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''com.cloudera.server.cmf.TrialState'': Cannot resolve reference to bean ''entityManagerFactoryBean'' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''entityManagerFactoryBean'': FactoryBean threw exception on object creation; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:616)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)

 

2.问题出现的原因,是因为连接到mysql的scm库出错了。

①首先查看连接到mysql的scm库的配置文件db.properties是否正常。

一般情况下位置在 /opt/cm-5.16.1/etc/cloudera-scm-server

②看看里面的配置是否正确

# The database type
# Currently ''mysql'', ''postgresql'' and ''oracle'' are valid databases.
com.cloudera.cmf.db.type=mysql

# The database host
# If a non standard port is needed, use ''hostname:port''
com.cloudera.cmf.db.host=localhost #ip和端口

# The database name
com.cloudera.cmf.db.name=scm #库名

# The database user
com.cloudera.cmf.db.user=scm #库用户,要在数据库中确认一下用户权限

# The database user''s password
com.cloudera.cmf.db.password=scm #库密码

# The db setup type
# By default, it is set to INIT
# If scm-server uses Embedded DB then it is set to EMBEDDED
# If scm-server uses External DB then it is set to EXTERNAL
com.cloudera.cmf.db.setupType=INIT #master为EXTERNAL,slave为INIT

③其实最好的测试办法,就是直接使用用户名和密码登录mysql看看是否能正常访问scm库。

 

3.重启master后可用了。

slave可能会出现下面报错:nested exception is java.lang.RuntimeException: ScmActive at bootup: Failed to validate the identity of Cloudera Manager.

在下一篇《CDH报错:ScmActive at bootup: Failed to validate the identity of Cloudera Manager.》中进行解决。

以上。

Exception in thread

Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persi...

swing

Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persistence provider for EntityManager named null
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at com.hs.selenium.MainFrame.initComponents(MainFrame.java:49)
    at com.hs.selenium.MainFrame.<init>(MainFrame.java:30)
    at com.hs.selenium.MainFrame$2.run(MainFrame.java:198)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

 

glassfish +jersey 用 @PersistenceContext 无法获得注入的 EntityManager

glassfish +jersey 用 @PersistenceContext 无法获得注入的 EntityManager

配置如下


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="core" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>core_test</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="none"/>
    </properties>
  </persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="oracle.jdbc.pool.OracleDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="oracle-thin_corePool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
        <property name="serverName" value="10.1.20.25"/>
        <property name="portNumber" value="1521"/>
        <property name="databaseName" value="pp"/>
        <property name="User" value="core"/>
        <property name="Password" value="core"/>
        <property name="URL" value="jdbc:oracle:thin:@10.1.20.25:1521:pp"/>
        <property name="driverClass" value="oracle.jdbc.OracleDriver"/>
    </jdbc-connection-pool>
    <jdbc-resource enabled="true" jndi-name="core_test" object-type="user"  pool-name="oracle-thin_corePool"/>
</resources>
程序如下 返 回的  
EntityManager
为空
@Stateless
public class UserJpaController implements Serializable {
    @Resource  
    private UserTransaction utx; 
    
//    @PersistenceContext(unitName="core") 
//    private EntityManagerFactory emf;
    
    @PersistenceContext(unitName="core") 
    private EntityManager iem;
    public EntityManager getEntityManager() {
//        return emf.createEntityManager();
        System.out.println("iem is " + iem);
        return iem;
    }



javax.persistence.PersistenceContextType的实例源码

javax.persistence.PersistenceContextType的实例源码

项目:lams    文件:PersistenceAnnotationBeanPostProcessor.java   
/**
 * Resolve the object against the application context.
 */
@Override
protected Object getResourcetoInject(Object target,String requestingBeanName) {
    // Resolves to EntityManagerFactory or EntityManager.
    if (this.type != null) {
        return (this.type == PersistenceContextType.EXTENDED ?
                resolveExtendedEntityManager(target,requestingBeanName) :
                resolveEntityManager(requestingBeanName));
    }
    else {
        // OK,so we need an EntityManagerFactory...
        return resolveEntityManagerFactory(requestingBeanName);
    }
}
项目:helium    文件:EntityManagerFactoryImpl.java   
public EntityManager createEntityManager(Map map) {
    //Todo support discardOnClose,persistencecontexttype?,interceptor,return new EntityManagerImpl(
            this,PersistenceContextType.EXTENDED,transactionType,discardOnClose,sessionInterceptorClass,map
    );
}
项目:spring4-understanding    文件:PersistenceAnnotationBeanPostProcessor.java   
/**
 * Resolve the object against the application context.
 */
@Override
protected Object getResourcetoInject(Object target,so we need an EntityManagerFactory...
        return resolveEntityManagerFactory(requestingBeanName);
    }
}
项目:spring4-understanding    文件:PersistenceInjectionTests.java   
@PersistenceContext(type = PersistenceContextType.EXTENDED)
public void setEntityManager(EntityManager em) {
    if (this.em != null) {
        throw new IllegalStateException("Already called");
    }
    this.em = em;
}
项目:jpa-unit    文件:PersistenceContextDecorator.java   
private EntityManager getEntityManager(final ExecutionContext context,final EntityManagerFactory emf) {
    EntityManager em = null;
    if (getPersistenceContextType(context) == PersistenceContextType.EXTENDED) {
        // EntityManager may be already open. If so use it.
        em = (EntityManager) context.getData(Constants.KEY_ENTITY_MANAGER);
    }

    if (em == null) {
        // create EntityManager and inject it
        em = emf.createEntityManager();
    }
    return em;
}
项目:jpa-unit    文件:PersistenceContextDecorator.java   
@Override
public void afterTest(final TestInvocation invocation) throws Exception {
    final ExecutionContext context = invocation.getContext();

    final EntityManager em = (EntityManager) context.getData(Constants.KEY_ENTITY_MANAGER);
    if (em != null && getPersistenceContextType(context) != PersistenceContextType.EXTENDED) {
        context.storeData(Constants.KEY_ENTITY_MANAGER,null);
        em.close();
    }
}
项目:proflr-server    文件:Application.java   
@Bean @PersistenceContext(type = PersistenceContextType.EXTENDED)
public SessionFactory sessionFactory() {
    LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource());
    builder.scanPackages("org.proflr.server.entity").addProperties(getHibernateProperties());

    return builder.buildSessionFactory();
}
项目:class-guard    文件:PersistenceAnnotationBeanPostProcessor.java   
/**
 * Resolve the object against the application context.
 */
@Override
protected Object getResourcetoInject(Object target,so we need an EntityManagerFactory...
        return resolveEntityManagerFactory(requestingBeanName);
    }
}
项目:class-guard    文件:PersistenceInjectionTests.java   
@PersistenceContext(type = PersistenceContextType.EXTENDED)
public void setEntityManager(EntityManager em) {
    if (this.em != null) {
        throw new IllegalStateException("Already called");
    }
    this.em = em;
}
项目:testee.fi    文件:JpaInjectionServicesTest.java   
private InjectionPoint persistenceContext(String unitName) {
    final InjectionPoint ip = mock(InjectionPoint.class);
    final Annotated annotated = mock(Annotated.class);
    when(ip.getAnnotated()).thenReturn(annotated);
    final PersistenceContext annotation = new PersistenceContext() {
        @Override
        public Class<? extends Annotation> annotationType() {
            return null;
        }

        @Override
        public String name() {
            return null;
        }

        @Override
        public String unitName() {
            return unitName;
        }

        @Override
        public PersistenceContextType type() {
            return null;
        }

        @Override
        public SynchronizationType synchronization() {
            return null;
        }

        @Override
        public PersistenceProperty[] properties() {
            return new PersistenceProperty[0];
        }
    };
    when(annotated.getAnnotation(PersistenceContext.class)).thenReturn(annotation);
    return ip;
}
项目:spring4-understanding    文件:PersistenceInjectionTests.java   
@Override
@PersistenceContext(unitName="unit2",type = PersistenceContextType.EXTENDED)
public void setEntityManager(EntityManager em) {
    super.setEntityManager(em);
}
项目:jpa-unit    文件:PersistenceContextDecorator.java   
private PersistenceContextType getPersistenceContextType(final ExecutionContext context) {
    final Field field = context.getPersistenceField();
    final PersistenceContext pc = field.getAnnotation(PersistenceContext.class);
    return pc.type();
}
项目:tapestry-jpa-transactions    文件:PersistenceContextImpl.java   
@Override
public PersistenceContextType type()
{
    return PersistenceContextType.TRANSACTION;
}
项目:switchyard    文件:EntityManagerImpl.java   
public EntityManagerImpl(EntityManagerFactoryImpl entityManagerFactory,PersistenceContextType pcType,SynchronizationType synchronizationType,PersistenceUnitTransactionType transactionType,boolean discardOnClose,Class sessionInterceptorClass,Map properties) {
    super(entityManagerFactory,pcType,synchronizationType,properties);
}
项目:class-guard    文件:PersistenceInjectionTests.java   
@Override
@PersistenceContext(unitName="unit2",type = PersistenceContextType.EXTENDED)
public void setEntityManager(EntityManager em) {
    super.setEntityManager(em);
}
项目:tomee    文件:PersistenceContextAnnFactoryTest.java   
@PersistenceContext(name = "method",unitName = "mu",type = PersistenceContextType.EXTENDED,properties = {
    @PersistenceProperty(name = "method1",value = "m1"),@PersistenceProperty(name = "method2",value = "m2")
})
public void method() {
}
项目:tomee    文件:PersistenceContextAnnFactoryTest.java   
@PersistenceContext(unitName = "mymu",properties = {
    @PersistenceProperty(name = "myMethod1",value = "mym1"),@PersistenceProperty(name = "myMethod2",value = "mym2")
})
public void setMyMethod() {
}

关于PersistenceUnit与PersistenceContext的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于CDH报错:PersistenceException: [PersistenceUnit: cmf.server] Unable to build EntityManagerFactory、Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persi...、glassfish +jersey 用 @PersistenceContext 无法获得注入的 EntityManager、javax.persistence.PersistenceContextType的实例源码的相关知识,请在本站寻找。

本文标签: