Tag: 交易

用于bean的CDI @TransactionAttribute

我正在测试应用程序上试验CDI 。 我有一个DAO ,它注入一个容器管理的JTA持久化上下文,如下所示: public class TestDAO implements Serializable { @PersistenceContext private EntityManager entityManager; public void insertEntity(Test test) { entityManager.persist(test); } } 现在我有一个像这样的CDI控制器bean: @Named @SessionScoped public class TestController implements Serializable { @Inject private TestDAO testDAO; public void finishGame() { testDAO.insertEntity(new Test(1, 2, 3)); } } 如果我运行它,我在尝试插入实体时在DAO收到错误,因为没有可用的活动事务。 到现在为止还挺好。 我可以通过使控制器bean成为有状态EJB来解决这个问题,它将把finishGame()包装在事务中。 但是假设我不想要EJB 。 作为测试,我使用@TransactionAttribute注释注释了finishGame()并且它有效(控制器bean不是EJB )。 所以我的问题是:它是如何工作的? CDI是否为普通bean定义了@TransactionAttribute ? […]

交易和发送电子邮件

考虑用户在Web应用程序上创建新帐户的常见用例,以及应用程序向用户的地址发送确认电子邮件。 从我所看到的,这通常以3种方式之一实现: Web控制器调用服务方法,该方法在单个事务中创建用户帐户并发送电子邮件。 Web控制器调用服务方法(使用tx propagation = never),它调用自身的第一个方法在事务中创建用户帐户,然后调用第二个方法来发送电子邮件。 Web控制器调用第一个服务方法,该方法在事务中创建用户帐户,然后调用第二个发送电子邮件的服务方法。 第一种方法简单明了,但存在发送电子邮件后回滚事务的风险,从而使电子邮件无效。 第二种方法更复杂,但它保证只有在用户创建实际成功时才发送电子邮件。 第三种方法很简单,但是使用不应该知道的业务逻辑来加重Web层。 是不是有一种更简单的方法,也许是AOP驱动的,可以保证只有在用户创建事务实际成功时才会发送电子邮件? 我是否认为第一种方法可能会失败? 我们正在使用Java EE + Spring堆栈并且愿意集成其他API(AOP?Spring Integration?)来实现这一目标。 干杯!

为什么我得到只有祖先查询被允许在事务内部错误

boolean r = ofy().transact(new Work() { @Override public Boolean run() { Visit visit = ofy().load().type(Visit.class) .filter(Visit.USER_ID, userID) .filter(Visit.VENUE_ID, venueID).first().get(); if (visit == null) return false; visit.setLastRequestDate(new Date(timestamp)); ofy().save().entity(visit).now(); return true; } }); 我明白了 java.lang.IllegalArgumentException:在事务内只允许祖先查询。 对于get()调用的行。 为什么? 我只是在这次交易中查询Visit实体。 我在一个事务中这样做,因为我希望所有这些都作为primefaces操作执行。

没有交易的JPA

我是JPA的新手。 我正在开发一个使用JPA(Hibernate实现)和Spring的应用程序。 我在我的persistence.xml中声明了一个持久性单元,并在我的Spring配置文件中配置了关于EntityManagerFactory的配置。 像这样的东西: create-drop org.hibernate.dialect.MySQL5Dialect 然后我有一些DAO,我用@PersistenceContext注释注入entityManager: public MyDaoImpl implements MyDao{ private EntityManager entityManager; @PersistenceContext private void setEntityManager(EntityManager em){ this.entityManager = em; } } 最后,我有一些注入DAO的服务(通过@Autowired Spring的注释): public MyServiceImpl implements MyService{ @Autowired private MyDao myDao; public List readOperation(){ // return myDAo.searchAll(); } } 作为一个只读操作,我认为它不需要@Transactional注释,但没有它,有一个例外: java.lang.IllegalStateException: No transactional EntityManager available at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:223) at $Proxy121.unwrap(Unknown Source) 我读过其他一些post: java.lang.IllegalStateException:没有可用的事务性EntityManager […]

Java Transaction API(JTA)概述帮助

有人能给我一个很好的解释JTA在现代Java应用程序中的动机和应用吗? 我不想要过于技术细节。 但只是一段关于为什么我们需要JTA,JTA完成了什么,以及可能是一段显示如何使用JTA的伪代码?

在MongoDB中的事务

我正在使用带有Java和Spring Data的NoSQL数据库MongoDB。 我知道MongoDB只支持单个文档的事务。 我正在使用Spring Transactions来执行MongoDB转换。 我正在使用TransactionTemplate。 使用TransactionTemplate时,我应该在TransactionManager中设置什么? 编辑 我有这样的事情: 我需要定义txnManagerBean以指向类似于MongoDB数据库的DataSourceTransactionManager。

JPA和默认锁定模式

使用JPA,我们可以使用手动OPTIMISTIC或PESSIMISTIC锁定来处理事务中的实体更改。 我想知道如果我们没有指定这两种模式中的一种,JPA如何处理锁定? 没有使用锁定模式? 如果我们没有定义显式锁定模式,数据库完整性是否会丢失? 谢谢

JPA – 何时在持久化对象时使用getTransaction()

我最近开始在Google App Engine上使用JPA。 在阅读一些例子时,我注意到对象持久化的方式存在一些变化。 在一个案例中,我见过这样的事情: entityManager.getTransaction().begin(); entityManager.persist(object); entityManager.getTransaction().commit(); 在其他情况下,我没有看到使用getTransaction()。 我只看到entityManager.persist(object)。 什么时候适合使用getTransaction()?

我该如何进行游戏! 手动JPA交易?

通常,玩! 请求成功完成后提交事务 。 在Play中手动提交事务的正确方法是什么? void addPerson() { Person p = new Person(“John”, “Doe”); p.save(); // TODO – commit the transaction // Now p should have an ID assert p.id != null; usePersonIdForSomethingNasty(p.id); }

用Java实现Kraken API

所以我目前正致力于Kraken API for Java 。 我正在使用我在http://pastebin.com/nHJDAbH8上找到的示例代码。 Kraken ( https://www.kraken.com/help/api )描述的一般用法是: API-Key = API密钥 API-Sign =使用HMAC-SHA512的消息签名 ( URI path + SHA256( nonce + POST data ) )和base64解码的秘密API密钥 和 nonce =总是增加无符号的64位整数 otp =双因素密码(如果启用了双因素,否则不需要) 但是我面临以下回应: {“error”:[“EAPI:Invalid key”]} 我已经尝试了几种方法(获得一个新的API,尝试更改sha256方法,因为我认为它被散列的方式有问题) 所以这是代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.security.InvalidKeyException; import java.security.MessageDigest; import […]