JavaEE容器管理事务
我可以在这里请求你的帮助吗。我对容器管理的事务如何在后台工作的了解是有限的,事实上我不知道。我已经研究了其他几个与此类似的问题,其中大多数都是关于Spring的,我没有使用Spring框架,我无法找到解决方案,所以我决定问 我正在尝试在不使用JavaEE容器管理事务,java,hibernate,jakarta-ee,transactions,javabeans,Java,Hibernate,Jakarta Ee,Transactions,Javabeans,我可以在这里请求你的帮助吗。我对容器管理的事务如何在后台工作的了解是有限的,事实上我不知道。我已经研究了其他几个与此类似的问题,其中大多数都是关于Spring的,我没有使用Spring框架,我无法找到解决方案,所以我决定问 我正在尝试在不使用begin()和commit()等显式编写事务代码的情况下实现一个简单的持久性。我正在使用Hibernate的JPA实现,我使用的应用服务器是“WildFly version 10.1 Final”。我的persistence.xml如下所示: <?
begin()
和commit()
等显式编写事务代码的情况下实现一个简单的持久性。我正在使用Hibernate的JPA实现,我使用的应用服务器是“WildFly version 10.1 Final”。我的persistence.xml
如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd"
version="1.0">
<persistence-unit name="PostgresUnit" transaction-type="JTA">
<class>beans.entity.Customer</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/mydb" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="password" />
<property name="hiberate.flushMode" value="FLUSH_AUTO" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
我有一个会话beanCustomerService
:
@Local
public interface CustomerService {
void addCustomer( final Customer customer );
}
@Stateless
@TransactionManagement ( TransactionManagementType.CONTAINER )
public class CustomerServiceImpl implements CustomerService {
@Inject
private CustomerResource customerResource; // Injection point using CDI
@Override
public void addCustomer( final Customer customer ) {
customerResource.addCustomer( customer );
}
}
CustomerResource
如下所示:
@Local
public interface CustomerResource {
void addCustomer( Customer customer );
}
@ManagedBean // javax.annotation.ManagedBean...
public class CustomerResourceImpl implements CustomerResource {
@PersistenceContext ( unitName = "PostgresUnit" )
private EntityManager entityManager;
@Override
@TransactionAttribute ( TransactionAttributeType.REQUIRED )
public void addCustomer( Customer customer ) {
entityManager.persist( customer );
entityManager.flush();
}
}
当我部署我的应用程序时,我的war
部署成功所有依赖项都被注入,我通过一个简单的JSP视图添加了一个客户,就像我一直在使用RESOURCE\u LOCAL
事务类型(当一切正常工作时)一样。现在代码运行,但什么也没有发生。我没有得到任何例外,或者无论如何,客户不会持久化到客户表。好像交易根本就没有发生。我错过了什么
@Local
public interface CustomerResource {
void addCustomer( Customer customer );
}
@ManagedBean // javax.annotation.ManagedBean...
public class CustomerResourceImpl implements CustomerResource {
@PersistenceContext ( unitName = "PostgresUnit" )
private EntityManager entityManager;
@Override
@TransactionAttribute ( TransactionAttributeType.REQUIRED )
public void addCustomer( Customer customer ) {
entityManager.persist( customer );
entityManager.flush();
}
}