草庐IT

TRANSACTIONS

全部标签

java - GAE HDR : Are entity retrievals by key eventually consistent within a XG transaction?

考虑“事务用途”中的第二个示例(“使用命名键更新实体,如果它尚不存在则创建它”):https://developers.google.com/appengine/docs/java/datastore/transactions现在考虑这个场景。多人游戏只允许任何两个玩家之间进行一场比赛。为确保这一点,使用播放器的每个键创建一个键。此键用作UniqueMatch实体的键。因此,为了创建匹配,创建了XG交易。在此交易中:我们检查是否不存在具有该键的UniqueMatch实体。如果使用该键的datastore.get()调用没有抛出EntityNotFoundException,那么我们就知

java - 在 Spring 中为不同数据源设置事务的正确方法?

我有一个应用程序需要连接到多个数据库。这是一个管理应用程序,主要用于管理不同数据库中的条目-我们不需要同时访问多个数据库,也不需要任何类型的分布式事务管理。基本上,应用程序的一个区域允许您在数据库A中创建小工具,而应用程序的另一个区域允许您在数据库B中配置类似的小工具。当只使用一个数据源时,我们已经设置了事务并完美地工作。配置如下所示:这会在CompanyService中的任何方法的任何执行上设置一个切入点并将事务建议与切入点相关联,切入点需要为名称以“create”开头的任何方法进行事务处理。交易建议与绑定(bind)到数据源的TransactionManager相关联。添加第二个(

java - Arjuna JTA 事务意外回滚

当我检查JBoss日志时,我看到了很多这样的错误2012-03-2912:01:27,358WARN@[com.arjuna.ats.jta.logging.loggerI18N][com.arjuna.ats.internal.jta.resources.arjunacore.norecoveryxa][com.arjuna.ats.internal.jta.resources.arjunacore.norecoveryxa]CouldnotfindnewXAResourcetouseforrecoveringnon-serializableXAResource2012-03-291

java - 使用 JUnit4 进行测试时,Spring @transactional 不会启动事务

我有以下配置。org.hibernate.dialect.SQLServerDialecttruetrueorg.hibernate.dialect.SQLServerDialectfalsefalsetruetrue然后,当我运行具有插入语句的测试时,它们会产生这样的错误消息:javax.persistence.TransactionRequiredException:Executinganupdate/deletequeryatorg.hibernate.ejb.QueryImpl.executeUpdate(QueryImpl.java:47)经过深思熟虑,我尝试了这个:@Run

java - 非数据库应用事务

如何将非数据库操作封装到事务中?例如,假设我有一些顺序调用的方法/函数,一些更新数据库,一些更新文件系统上的文件,一些更新HttpSession中的参数,一些更新缓存等。如果是后者那些失败了,比如更新session,我如何回滚文件系统、数据库等中的所有其他更改?环境是一个JavaServlet容器,如Tomcat,带有Struts2之类的东西,任何RDBMS,一个持久层,如Hibernate或Ibatis,等等。 最佳答案 所有这些都必须是事务性资源,能够参与两阶段提交协议(protocol),以便执行您想要的操作。除非您的代码中有

java - 单事务跨多线程解决方案

据我了解,所有事务都是线程绑定(bind)的(即上下文存储在ThreadLocal中)。例如如果:我在事务父方法中启动事务在异步调用中使数据库插入#1让数据库在另一个异步调用中插入#2然后这将产生两个不同的事务(每个插入一个),即使它们共享相同的“事务”父级。例如,假设我执行了两次插入(并使用了一个非常简单的示例,即为了简洁起见,不使用执行程序或可完成的future等):@TransactionalpublicvoidaddInTransactionWithAnnotation(){addNewRow();addNewRow();}将根据需要执行两个插入,作为同一事务的一部分。但是,如

java - 将声明式和编程式事务与 Spring 和 JPA 监听器混合

我正在使用JPAEntityListener做一些额外的审计工作,并使用@Configurable将Spring管理的AuditService注入(inject)我的AuditEntryListener。AuditService生成AuditEntry对象的集合。AuditService本身是一个Singleton范围的bean,我想将所有AuditEntry对象收集在一个公共(public)key下,然后可以由最外层的服务层(调用持久调用的层调用,进而触发EntityListener)访问。我正在考虑使用Spring的TransactionSynchronizationManager

没有事务的 Java Google Appengine 分片计数器

我正在查看Java中的ShardedCounters示例:http://code.google.com/appengine/articles/sharding_counters.html我对增量方法的实现有疑问。在python中,它显式地包装了get()和事务中的增量。在Java示例中,它只是检索并设置它。我不确定我是否完全理解数据存储和事务,但似乎关键更新部分应该包含在数据存储事务中。我错过了什么吗?原代码:publicvoidincrement(){PersistenceManagerpm=PMF.get().getPersistenceManager();Randomgenera

java - 在 AutoCloseable close() 中检测异常

我想构建一个自定义的AutoCloseable类,这样我就可以将其转换为:try{begin();doThings();commit();}finally{if(transactionIsActive())rollback();}进入更容易try(Transactiont=begin()){//toobadIhavetostoreitintthoughIdon'tuseitdoThings();}Transaction在这里是AutoCloseable,在close()中它会根据需要提交或回滚事务。但要实现这一点,我需要在Transaction.close()中检测tryblock内是

java - 如何避免两个不同的线程从数据库中读取相同的行(Hibernate 和 Oracle 10g)

假设我有两个不同的线程,T1和T2,同时访问同一个数据库并从同一个表中获取数据。现在在线程启动时,我需要从表中获取数据并将行存储到一个集合中,然后我将使用它在其他地方执行一些工作。我不希望两个线程能够处理相同的数据,因为这会导致重复(和长时间)的工作。更具体地说,这是一个企业应用程序,需要在启动时加载一些记录并将其存储在一个集合中以执行一些额外的工作。问题在于,在集群环境中,这可能会导致两个不同的实例加载相同的数据,因此可能会重复工作。所以我希望行仅由单个实例加载一次。我怎样才能避免这种情况?我目前正在使用Hibernate和Oracle10g。这些是我到目前为止的解决方案:以编程方式