Как получить доступ к соединению с базой данных из JNDI и есть ли поддержка транзакций XA с использованием расширения Saxonica(Saxon) sql?

Я использую 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. Я также хочу знать, может ли вся эта деятельность с базой данных стать частью транзакции XA.

Таким образом, я не могу достичь желаемой производительности. В качестве альтернативы я попытался использовать smooks и FTL с использованием источника данных jndi, что в 3-4 раза быстрее, но я теряю расширенные возможности xslt и большое сообщество.

Если кто-то сделал что-то подобное, пожалуйста, помогите.

1 ответ

Решение

Расширение SQL для Saxon было в значительной степени предоставлено пользователем, оно имеет открытый исходный код, и вы можете расширить его или использовать его в качестве отправной точки для чего-то более амбициозного.

Но вам может и не понадобиться: например, вы, безусловно, можете передать соединение JDBC как параметр к таблице стилей (обернутый как ExternalObject) вместо того, чтобы получать соединение с помощью Saxon sql:connect.

Если бы я делал расширение SQL сегодня, я не думаю, что использовал бы элементы расширения, я сделал бы все это с помощью функций. Это проще, чем раньше, потому что теперь у нас есть карты и функции более высокого порядка, поэтому можно создавать более сложные структуры параметров и результатов. Например, я хотел бы, чтобы sql:query() возвращал массив карт, каждая из которых представляла одну строку результата.

Другие вопросы по тегам