【发布时间】:2016-02-13 09:13:26
【问题描述】:
我已设置好我的 Maven 应用程序并运行 Wildfly 服务器。我有一个 mySql 数据源,我可以使用我的 EntityManager 读取它,但在每次尝试持久化我的实体时,我都会收到错误消息“javax.persistence.TransactionRequiredException:没有事务正在进行中”
下面是我的 BaseDao 类
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class BaseDao {
private static final String PERSISTENCE_UNIT_NAME = "MySqlDS";
private EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
public EntityManager getEntityManager() {
return factory.createEntityManager();
}
}
而我的persistemce.xml如下
<?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="MySqlDS" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>main.java.yas.entity.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.connection.charSet" value="UTF-8"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
</properties>
</persistence-unit>
</persistence>
而我调用管理器的服务类如下:
public class UserService {
@EJB
private UserManager manager;
public String createNewUser_test(String name) {
return manager.createNewUser_test(name);
}
}
而我的经理班是这样的:
import javax.ejb.*;
import javax.persistence.EntityManager;
@Stateless
public class UserManager {
public String createNewUser_test(String name) {
BaseDao dao = new BaseDao();
EntityManager em = dao.getEntityManager();
try {
User user = new User();
user.setFirstName(name);
user.setLastName(name);
user.setRole(UserRole.RegistredUser);
user.setEmail("email@email.com");
em.persist(user);
}
finally {
em.flush();
em.close();
}
}
}
我已经检查过了,我在 Wildfly Standalone.xml 文件中声明了“jta = true”。
你能告诉我我的申请有什么问题吗?
更新: 我应用了一些审稿人建议的一些更改。现在我在服务类中获取 NPE,我正在调用管理器来创建新用户。
【问题讨论】:
标签: java hibernate maven jpa wildfly