JNDI 数据源的 WSO2 "Use Data Source Factory" 选项
WSO2 "Use Data Source Factory" option of JNDI datasources
配置数据源时,可以选中 "Expose as JNDI datasource" 部分中的 "Use Data Source Factory" 复选框。文档解释如下:
To make the datasource accessible from an external environment, you must use a data source factory. When this option is selected, a reference object will be created with the defined datasource properties. The data source factory will create the datasource instance based on the values of the reference object when accessing the datasource from an external environment. In the datasource configuration, this is set as follows:
< jndiConfig useDataSourceFactory="true" >
然而,我听起来完全不清楚。这里的 "external environment" 可能是什么?
有人可以更详细地解释设置和取消设置复选框状态之间的实际区别吗?
我在自定义中介中使用这样的JNDI数据源连接到Postgres9.3,看到的区别如下:
- checkbox "on": 没有发出事务标记(BEGIN/COMMIT/ROLLBACK),但新记录总是添加到数据库中,就像自动提交一样
- checkbox "off":不时添加新记录,隐式发出BEGIN和ROLLBACK语句(显示在Postgres日志中)
因此,此设置的效果是为每个请求它的中介实例化特定的连接池 (org.apache.tomcat.jdbc.pool.DataSource)。
否则,所有中介都使用相同的连接池。
在我的例子中,问题的出现是因为连接设置在 returns 进入池后没有被清除。一些中介已经为一些连接设置了 autoCommit=false 并且这里的行为变得不确定:仍然具有默认设置的连接成功地将数据保存在数据库中,而具有 autoCommit=false 的连接发出 BEGIN/ROLLBACK 语句(因此在数据库中没有保存任何内容)。
配置数据源时,可以选中 "Expose as JNDI datasource" 部分中的 "Use Data Source Factory" 复选框。文档解释如下:
To make the datasource accessible from an external environment, you must use a data source factory. When this option is selected, a reference object will be created with the defined datasource properties. The data source factory will create the datasource instance based on the values of the reference object when accessing the datasource from an external environment. In the datasource configuration, this is set as follows: < jndiConfig useDataSourceFactory="true" >
然而,我听起来完全不清楚。这里的 "external environment" 可能是什么?
有人可以更详细地解释设置和取消设置复选框状态之间的实际区别吗?
我在自定义中介中使用这样的JNDI数据源连接到Postgres9.3,看到的区别如下:
- checkbox "on": 没有发出事务标记(BEGIN/COMMIT/ROLLBACK),但新记录总是添加到数据库中,就像自动提交一样
- checkbox "off":不时添加新记录,隐式发出BEGIN和ROLLBACK语句(显示在Postgres日志中)
因此,此设置的效果是为每个请求它的中介实例化特定的连接池 (org.apache.tomcat.jdbc.pool.DataSource)。 否则,所有中介都使用相同的连接池。
在我的例子中,问题的出现是因为连接设置在 returns 进入池后没有被清除。一些中介已经为一些连接设置了 autoCommit=false 并且这里的行为变得不确定:仍然具有默认设置的连接成功地将数据保存在数据库中,而具有 autoCommit=false 的连接发出 BEGIN/ROLLBACK 语句(因此在数据库中没有保存任何内容)。