2013-03-21 3 views
2

При установке 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) 

ответ

3

Я также работать в этом, но я был в состоянии получить эту работу, если я использую URL XA-источник данные-свойство.

Пример:

<xa-datasource-property name="URL">jdbc:sqlserver://<host>:<port>;database=<db>;integratedSecurity=true</xa-datasource-property> 

Эти фрагменты должны были бы быть удалены:

<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> 
+0

Это прекрасно работает, спасибо! – Vedran

Смежные вопросы