Как получить доступ к соединению с базой данных из 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 и большое сообщество.

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


person Dev_Deepak    schedule 27.10.2016    source источник


Ответы (1)


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

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

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

person Michael Kay    schedule 27.10.2016