我有一个使用Ebean查询数据库的Jax-RS Rest服务。在任何查询中,我都会抛出此异常。
例如。
User currentUser = new QUser().where().id.eq(currentUserID)).findUnique();
日志
错误[io.ebeaninternal.server.transaction.JdbcTransaction](默认任务-10)通过ROLLBACK结束仅查询事务时出错:java.sql.SQLException:IJ031021:在托管事务期间无法回滚
现在查询返回适当的用户并且不会干扰Jax-RS。
但是我无法忽略大型代码气味
创建的巨大日志因为每次查询都会被抛出。
ServerConfig config = new ServerConfig();
config.setDataSource(ds);
config.setName("db");
config.setAutoCommitMode(false);
config.setDatabasePlatform(new PostgresPlatform());
config.setRegister(true);
config.setDefaultServer(true);
config.setTransactionRollbackOnChecked(true);
config.addPackage(User.class.getPackage().getName());
EbeanServer es = EbeanServerFactory.create(config);
答案 0 :(得分:1)
在Java EE中使用ebean时,需要在使用EbeanServer之前对其进行配置。一个典型的实现方法是在@Startup @Singleton bean管理的事务ejb的@PostConstruct方法中。而且您需要对其进行配置以使用JTA事务管理器,以便它不会尝试自行开始/提交事务。
@Singleton
@Startup
@TransactionManagement(TransactionManagementType.BEAN)
public class AtStartup {
@Resource(mappedName = "java:jboss/datasources/EbeanTestDS")
private DataSource ds;
@SneakyThrows
@PostConstruct
public void startup() {
new MigrationRunner(new MigrationConfig()).run(ds); // begin/commits transaction for the migration...
ServerConfig config = new ServerConfig();
config.setDataSource(ds);
config.addPackage(Customer.class.getPackage().getName());
config.setUseJtaTransactionManager(true); // This is important !
config.setAutoCommitMode(false);
EbeanServerFactory.create(config);
}