我有使用数据库的主数据源,它使用一些连接池。现在我想创建第二个数据源,它将使用相同的连接池在单独的事务中执行日志记录操作,然后是主数据库事务!据我所知,Glassfish {{3}如果多个数据源使用相同的连接池,那么它们共享一个事务,直到连接没有关闭(我可能错了,请纠正我)。
那么,在获取与数据源的连接时,有没有办法启动新事务?通过设置TransactionIsolation可能是?
以下列方式检索连接:
private synchronized Connection getConnection() {
if (connection == null) {
try {
final Context ctx = new InitialContext();
final DataSource ds = (DataSource) ctx.lookup(getDataSourceLookupAddress());
connection = ds.getConnection();
} catch (final NamingException e) {
errorHandler.error("Datasource JNDI lookup failed: " + dataSourceLookupAddress + "!");
errorHandler.error(e.toString());
} catch (final SQLException e) {
errorHandler.error("Sql connection failed to " + dataSourceLookupAddress + "!");
errorHandler.error(e.toString());
}
}
return connection;
}
答案 0 :(得分:0)
我已经弄清楚了。有必要启动一个新的Thread,然后创建一个新的事务。另请参阅Writing to database log in the middle of rollback