如何从 JNDI 访问数据库连接,是否有使用 saxonica(Saxon) sql 扩展的 XA 事务支持?

How to access database connection from JNDI and is there XA transaction support using saxonica(Saxon) sql extension?

我正在使用 Saxon 9.5 EE 并遵循官方文档,其中给出了使用 saxon sql 的示例。在其中提到了连接到数据库的以下代码段

<xsl:stylesheet
xmlns:sql="http://saxon.sf.net/sql"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:saxon="http://saxon.sf.net/"
extension-element-prefixes="saxon sql">

<!-- insert your database details here, or supply them in parameters -->
<xsl:param name="driver" select="'sun.jdbc.odbc.JdbcOdbcDriver'"/>
<xsl:param name="database" select="'jdbc:odbc:test'"/>  
<xsl:param name="user"/>
<xsl:param name="password"/>

但我不想在这里提及 IP,url 密码,我想使用来自 jndi 数据源的现有连接池。我还想知道是否所有数据库 activity 都可以成为 XA 事务的一部分。

这样我无法达到预期的性能。除此之外,我尝试使用 smooks 和 FTL 使用 jndi 数据源,速度快 3-4 倍,但我失去了 xslt 高级功能和大型社区。

如果有人做过类似的事情请帮忙。

Saxon 的 SQL 扩展主要是用户贡献的代码,它是开源的,欢迎您对其进行扩展或将其用作更具雄心的起点。

但您可能不需要:例如,您当然可以将 JDBC 连接作为参数传递给样式表(包装为 ExternalObject),而不是使用 Saxon 的 sql:connect 获取连接.

如果我今天要进行 SQL 扩展,我认为我不会使用扩展元素,我会全部使用函数来完成。这比以前容易多了,因为我们现在有了映射和高阶函数,因此可以设计更复杂的参数和结果结构。例如,我会有 sql:query() return 一组地图,每个地图代表一行结果。