GVKun编程网logo

Java CDI @PersistenceContext和线程安全(java simpledateformat线程安全)

9

在这篇文章中,我们将带领您了解JavaCDI@PersistenceContext和线程安全的全貌,包括javasimpledateformat线程安全的相关情况。同时,我们还将为您介绍有关Excep

在这篇文章中,我们将带领您了解Java CDI @PersistenceContext和线程安全的全貌,包括java simpledateformat线程安全的相关情况。同时,我们还将为您介绍有关Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persi...、glassfish +jersey 用 @PersistenceContext 无法获得注入的 EntityManager、iphone – NSPersistentStoreCoordinator线程安全吗?、java – JBoss AS 7无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManagers的知识,以帮助您更好地理解这个主题。

本文目录一览:

Java CDI @PersistenceContext和线程安全(java simpledateformat线程安全)

Java CDI @PersistenceContext和线程安全(java simpledateformat线程安全)

在多个类中,EntityManager @Inject [ed]是否是线程安全的?

@PersistenceContext(unitName="blah")private EntityManager em;

答案1

小编典典

尽管EntityManager实现本身不是线程安全的,但是Java EE容器注入了一个代理,该代理将所有方法调用委托给与事务绑定的EntityManager。因此,每个事务都使用其自己的EntityManager实例。至少对于事务范围的持久性上下文而言,这是正确的(默认设置)。

如果容器将在每个bean中注入EntityManager的新实例,则以下操作将无效:

@Statelesspublic class Repository1 {   @EJB   private Repository2 rep2;   @PersistenceContext(unitName="blah", type = PersistenceContextType.TRANSACTION)   private EntityManager em;   @TransactionAttribute   public void doSomething() {      // Do something with em      rep2.doSomethingAgainInTheSameTransaction();   }}@Statelesspublic class Repository2 {   @PersistenceContext(unitName="blah", type = PersistenceContextType.TRANSACTION)   private EntityManager em;   @TransactionAttribute   public void doSomethingAgainInTheSameTransaction() {      // Do something with em   }}

doSomething-> doSomethingAgainInTheSameTransaction调用在单个事务中发生,因此bean必须共享相同的EntityManager。实际上,它们共享同一个代理EntityManager,该代理将调用委派给同一持久性上下文。

因此,您可以在单例bean 中合法使用EntityManager,如下所示:

@Singleton@ConcurrencyManagement(ConcurrencyManagementType.BEAN)public class Repository {   @PersistenceContext(unitName="blah", type = PersistenceContextType.TRANSACTION)   private EntityManager em;}

另一个证明是,在EntityManager javadoc中没有提及线程安全。因此,当您停留在Java EE容器中时,无需关心对EntityManager的并发访问。

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;
    }



iphone – NSPersistentStoreCoordinator线程安全吗?

iphone – NSPersistentStoreCoordinator线程安全吗?

我正在使用一个使用Core Data的iPhone应用程序.应用程序调用Web服务,解析生成的 XML文件,然后在我的应用程序中创建或修改Core Data对象.我已经处理Web服务调用和异步解析,但是我已经将解析的数据传回主线程来操作Core Data对象.我也想在后台线程中运行这个进程. (1-2秒的暂停并不能为一个伟大的用户体验)

明显的方法是为后台线程专门创建一个托管对象上下文,但是在Apple’s Core Data Programming Guide中我读了这一行:

A persistent store coordinator provides to its managed object contexts the façade of one virtual store. For completely concurrent operations you need a different coordinator for each thread.

所以这里的catch:你不能有两个NSPersistentStoreCoordinators提供对同一个商店的访问.但是,marcus Zarra的核心数据书认为NSPersistentStoreCoordinator是线程安全的,并且将序列化I / O请求(第157页).

有人可以为我清除这个吗?在另一个线程上运行第二个托管对象上下文是否可能与主线程共享相同的NSPersistentStoreCoordinator?还是更简洁的是NSPersistentStoreCoordinator线程安全?

解决方法

Zarra后来指出,上下文锁定了商店,所以在线程之间使用相同的NSPersistentStoreCoordinator是可以的.

Although the NSPersistentStoreCoordinator is not thread safe either,the NSManagedobjectContext kNows how to lock it properly when in use. Therefore,we can attach as many NSManagedobjectContext objects to a single NSPersistentStoreCoordinator as we want without fear of collision.

java – JBoss AS 7无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManagers

java – JBoss AS 7无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManagers

我正在使用JBoss AS 7.1.1,并且可以配置一个新的JTA数据源并将其连接到我的EJB
@PersistenceContext(unitName="TestPU")
private EntityManager entityManager;

当我尝试使用RESOURCE_LOCAL PersistenceUnit时,我收到错误,说我无法使用@PersistenceContext注入RESOURCE_LOCAL PU.

我已经配置了persistence.xml,如下所示:

<persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <properties>   
    <property name="javax.persistence.jdbc.driver" value="com.MysqL.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:MysqL://localhost:3306/xy"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="blah"/>        
        <property name="hibernate.hbm2ddl.auto" value="update" />       
      </properties> 
</persistence-unit>

而在我的DAO中,

@Stateless
public class UserDAO {
    @PersistenceContext(unitName="TestPU")
    private EntityManager entityManager;


}

当我在AS 7.1.1上部署我的应用程序时,我收到以下错误.

JBAS011428: Cannot inject RESOURCE_LOCAL container managed EntityManagers using @PersistenceContext
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:169)
    at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:162)
    at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:155)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 5 more

任何解决方案使用RESOURCE_LOCAL PU与@PersistenceContext?

解决方法

JTA:在Java EE环境中,事务由容器&默认情况下其JTA事务.您可以通过查找或注入获取实体管理器.

RESOURCE_LOCAL:在Java SE中,应用程序必须明确管理事务&资源本地事务是本地事务.你必须创建EntityManagerFactory&那么可以从它创建实体管理器.

当您在应用程序服务器中部署它时,请将事务类型更改为persistence.xml中的JTA.

关于Java CDI @PersistenceContext和线程安全java simpledateformat线程安全的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persi...、glassfish +jersey 用 @PersistenceContext 无法获得注入的 EntityManager、iphone – NSPersistentStoreCoordinator线程安全吗?、java – JBoss AS 7无法使用@PersistenceContext注入RESOURCE_LOCAL容器管理的EntityManagers的相关信息,请在本站寻找。

本文标签: