Использование стороннего jar jdbc конфликтует с jboss_redirected. _DocumentBuilderfactory - PullRequest
0 голосов
/ 14 мая 2018

Я использую сторонний jdbc jar (drill-jdbc-all-1.13.jar) в jboss / modules / company / jdbc / other, с module.xml, как здесь:

<module xmlns="urn:jboss:module:1.3" name="vermilion.jdbc.others" slot="main">
    <resources>
        <resource-root path="drill-jdbc-all-1.13.0.jar"/>
    </resources>
    <dependencies>    
       <module name="javax.api"/>    
       <module name="javax.transaction.api"/>    
       <module name="sun.jdk"/>    
       <module name="org.apache.commons.collections"/>    
    </dependencies>  
</module>

Однако, когда я вызываю драйвер со строкой соединения, это, кажется, вызывает конфликт со следующей ошибкой:

ПРЕДУПРЕЖДЕНИЕ 2018-05-02 12: 09: 57,467 (com.vermilionsoftware.vrs.common.biz.db.DGSFactory: 109) Не удалось получить соединение с БД: java.lang.ClassCastException: __redirected .__ DocumentBuilderFactory нельзя привести к javax.xml.parsers.DocumentBuilderFactory

at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)

at org.apache.hadoop.conf.Configuration.loadResource(Configuration.java:2516)

at org.apache.hadoop.conf.Configuration.loadResources(Configuration.java:2492)
at org.apache.hadoop.conf.Configuration.getProps(Configuration.java:2405)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1143)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1115)
at oadd.org.apache.drill.exec.rpc.security.kerberos.KerberosFactory.createAndLoginUser(KerberosFactory.java:59)
at oadd.org.apache.drill.exec.rpc.user.UserClient.authenticate(UserClient.java:219)
at oadd.org.apache.drill.exec.rpc.user.UserClient.connect(UserClient.java:155)
at oadd.org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:432)
at oadd.org.apache.drill.exec.client.DrillClient.connect(DrillClient.java:379)
at org.apache.drill.jdbc.impl.DrillConnectionImpl.<init>(DrillConnectionImpl.java:158)
at org.apache.drill.jdbc.impl.DrillJdbc41Factory.newDrillConnection(DrillJdbc41Factory.java:72)
at org.apache.drill.jdbc.impl.DrillFactory.newConnection(DrillFactory.java:69)
at oadd.org.apache.calcite.avatica.UnregisteredDriver.connect(UnregisteredDriver.java:143)
at org.apache.drill.jdbc.Driver.connect(Driver.java:72)

Configuration.java в Hadoop вызывает DocumentBuilderFactory.newInstance () без указания какой-либо реализации jaxp, и поэтому он создает экземпляр с использованием загрузчика классов приложения, а не загрузчика классов, загружающего класс Configutaion.java.

Может ли кто-нибудь помочь мне обойти эту ошибку?

Спасибо

1 Ответ

0 голосов
/ 15 мая 2018

Я думаю, что проблема не в том, что ваша реализация JAXP не используется, а в том, что вы включаете JAXP API, что запрещено.Вы должны убедиться, что drill-jdbc-all-*.jar не включает javax.xml классы.

Как правило, ClassCastException, такой как это, будет указывать на дубликаты JAR API.

...