При установке IntegratedSecurity в источнике данных XA на JBoss к истине, драйвер от Microsoft JDBC не решает «корректировочные» установку на логическое значение, но выдает ошибку:Установки комплексной безопасности для XA соединений на JBoss
java.lang.NoSuchMethodException:
com.microsoft.sqlserver.jdbc.SQLServerXADataSource.setIntegratedSecurity(java.lang.String)
Это только проблема при использовании источника данных XA, источники данных non XA работают нормально со встроенной безопасностью.
Есть ли другой способ установить интегрированную защиту для соединений XA на JBoss или способ сообщить ему отправить логическое значение при настройке свойства xa-datasource?
Чтобы воспроизвести это поведение:
а) В JBoss AS конфигурации \ автономный \ standalone.xml добавить новый XA-источник данных в JNDI:
<xa-datasource jta="true" jndi-name="java:jboss/datasources/jndiName" pool-name="poolName" enabled="true" use-java-context="true" use-ccm="true">
<xa-datasource-property name="ServerName">
localhost
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
MyDbName
</xa-datasource-property>
<xa-datasource-property name="SelectMethod">
cursor
</xa-datasource-property>
<!-- this should work but doesn't -->
<xa-datasource-property name="IntegratedSecurity">
true
</xa-datasource-property>
<xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
<driver>sqljdbc</driver>
<xa-pool>
<is-same-rm-override>false</is-same-rm-override>
</xa-pool>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"/>
</validation>
</xa-datasource>
б) Restart JBoss AS
с) Попробуйте выполнить запрос, используя настроенное соединение JNDI:
InitialContext ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:jboss/datasources/jndiName");
Connection conn = null;
try {
conn = ds.getConnection();
// try to execute something
CallableStatement stmt = conn.prepareCall("{? = call some_stored_procedure()}");
stmt.execute();
} finally {
if (conn != null)
conn.close();
}
Выполнение этого кода приведет к исключению, гласящее:
java.lang.NoSuchMethodException:
com.microsoft.sqlserver.jdbc.SQLServerXADataSource.setIntegratedSecurity(java.lang.String)
Это прекрасно работает, спасибо! – Vedran