Java 使用ORMLite的RESTful web服务中的事务
我正在使用ORMLite框架作为ORM创建RESTful web服务。 我的一些服务是一个事务,这一点很重要——如果发生任何异常,数据库应该回滚 以下是我创建的方法之一:Java 使用ORMLite的RESTful web服务中的事务,java,rest,transactions,ormlite,Java,Rest,Transactions,Ormlite,我正在使用ORMLite框架作为ORM创建RESTful web服务。 我的一些服务是一个事务,这一点很重要——如果发生任何异常,数据库应该回滚 以下是我创建的方法之一: @POST @CONSUMES(MediaType.APPLICATION_JSON) @PRODUCES(MediaType.APPLICATION_JSON) public JSONResponeseLogin getJson(LoginRequest request) { /* Extract data fro
@POST
@CONSUMES(MediaType.APPLICATION_JSON)
@PRODUCES(MediaType.APPLICATION_JSON)
public JSONResponeseLogin getJson(LoginRequest request) {
/* Extract data from request */
openDBConnection();
try {
TransactionManager.callInTransaction(conn, () -> {
/* Validate user input and store data to database */
});
} catch (InvalidDataInRequestException ex) {
meta.addError(new ServiceError(errorCode));
logger.info("Error code: "+ errorCode + " " + ServiceErrorCode.textFromErrorCode(errorCode));
logger.info("Request: " + request.toString());
logger.catching(ex);
} catch (Exception e) {
meta.addError(new ServiceError(errorCode));
logger.info("Error code: "+ errorCode + " " + ServiceErrorCode.textFromErrorCode(errorCode));
logger.info("Request: " + request.toString());
logger.catching(ex);
} finally {
closeDBConnection();
}
response.setMetaData(meta);
return response;
}
我有几个问题:
DAO
对象正在使用JdbcPooledConnectionSource
进行初始化
我唯一想到的问题是,在每秒将收到10-20个请求的服务器上执行此操作是安全的-必须有一个原因DAO
是否接受整个池
亲切的问候
我用错工具做这项工作了吗?我希望我的整个方法是一个事务,但我有一种感觉,ORMLite的TransactionManager
并不是为此而设计的
不,是的。在“可能的解决方法”部分,这正是TransactionManager
正在做的:
- 获得单一连接
- 停止自动提交
- 开始一项交易
- 做数据库工作
- 停止并提交事务
- 恢复自动提交
TransactionManager
)
对。TransactionManager
需要捕获异常,以便回滚事务,但我不想从方法中抛出Exception
您可以捕获SQLException
,然后手动检查e.getCause()
输出。有点粗糙,但如果您想查看异常,这是必要的
在每秒将收到10-20个请求的服务器上这样做安全吗?DAO接受整个池肯定是有原因的
我不是100%确定你说的安全是什么意思。我假设Android可以同时处理10-20个开放数据库连接。对于Android/Sqlite来说,这是一个比ORMLite更重要的问题。当然,这是假设数据库作业完成所需时间不到一秒钟
我用错工具做这项工作了吗?我希望我的整个方法是一个事务,但我有一种感觉,ORMLite的TransactionManager
并不是为此而设计的
不,是的。在“可能的解决方法”部分,这正是TransactionManager
正在做的:
- 获得单一连接
- 停止自动提交
- 开始一项交易
- 做数据库工作
- 停止并提交事务
- 恢复自动提交
TransactionManager
)
对。TransactionManager
需要捕获异常,以便回滚事务,但我不想从方法中抛出Exception
您可以捕获SQLException
,然后手动检查e.getCause()
输出。有点粗糙,但如果您想查看异常,这是必要的
在每秒将收到10-20个请求的服务器上这样做安全吗?DAO接受整个池肯定是有原因的
我不是100%确定你说的安全是什么意思。我假设Android可以同时处理10-20个开放数据库连接。对于Android/Sqlite来说,这是一个比ORMLite更重要的问题。当然,这是假设数据库作业完成所需时间不到一秒钟