Установка драйвера JDBC из частного защищенного репозитория maven в Wildfly Swarm

Я пытаюсь установить драйвер Oracle JDBC в Wildfly Swarm (2016.12.0), используя API конфигурации Java. JAR-файл драйвера правильно установлен в удаленном, частном, защищенном репозитории maven. Я в основном следую примеру здесь:

https://github.com/wildfly-swarm/wildfly-swarm-examples/tree/master/datasource/datasource-subsystem

У меня есть каталог src/main/resources/modules/com/oracle/ojdbc/main в моем проекте со следующим файлом module.xml:

<module xmlns="urn:jboss:module:1.3" name="com.oracle.ojdbc">

    <resources>
        <artifact name="my.repo.group.id:ojdbc6:11.2.0.1.0"/>    
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

Вот фрагмент кода конфигурации, который я использую:

Swarm swarm = new Swarm();

DatasourcesFraction datasources = new DatasourcesFraction().jdbcDriver("oracle-ojdbc-xa", (d) -> {
    d.xaDatasourceClass("oracle.jdbc.xa.client.OracleXADataSource");
    d.driverModuleName("com.oracle.ojdbc");
});

swarm.fraction(datasources);
swarm.start();
swarm.deploy();

Вот исключение, которое я получаю:

2016-12-17 13:25:49,138 ERROR [stderr] (ServerService Thread Pool -- 28) org.jboss.modules.ModuleLoadException: Error loading module from modules/com/oracle/ojdbc/main/module.xml
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.xml.ModuleXmlParser.parseModuleXml(ModuleXmlParser.java:228)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.wildfly.swarm.bootstrap.modules.BootstrapClasspathModuleFinder.findModule(BootstrapClasspathModuleFinder.java:58)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.ModuleLoader.findModule(ModuleLoader.java:439)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.ModuleLoader.loadModuleLocal(ModuleLoader.java:342)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.ModuleLoader.preloadModule(ModuleLoader.java:289)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:221)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.connector.subsystems.datasources.JdbcDriverAdd.performRuntime(JdbcDriverAdd.java:98)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.controller.AbstractAddStepHandler.performRuntime(AbstractAddStepHandler.java:337)
[0m[31m2016-12-17 13:25:49,139 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.controller.AbstractAddStepHandler$1.execute(AbstractAddStepHandler.java:151)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:890)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:659)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:370)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.as.controller.ParallelBootOperationStepHandler$ParallelBootTask.run(ParallelBootOperationStepHandler.java:359)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at java.lang.Thread.run(Thread.java:745)
[0m[31m2016-12-17 13:25:49,140 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.threads.JBossThread.run(JBossThread.java:320)
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28) Caused by: org.jboss.modules.xml.XmlPullParserException: Failed to resolve artifact 'my.repo.group.id:ojdbc6:11.2.0.1.0' (position: END_TAG seen ... name="my.repo.group.id:ojdbc6:11.2.0.1.0"/>... @6:81) 
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.xml.ModuleXmlParser.parseArtifact(ModuleXmlParser.java:838)
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.xml.ModuleXmlParser.parseResources(ModuleXmlParser.java:739)
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.xml.ModuleXmlParser.parseModuleContents(ModuleXmlParser.java:535)
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.xml.ModuleXmlParser.parseDocument(ModuleXmlParser.java:340)
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28)     at org.jboss.modules.xml.ModuleXmlParser.parseModuleXml(ModuleXmlParser.java:226)
[0m[31m2016-12-17 13:25:49,141 ERROR [stderr] (ServerService Thread Pool -- 28)     ... 16 more

Я смог подтвердить, что код примера работает из проекта wildfly-swarm, поэтому я уверен, что в моем проекте нет проблем с сетью, конфигурацией или очевидной зависимостью от maven; Я могу заставить это нормально работать, например, с драйвером mysql, он устанавливается без видимых проблем. Я также уверен, что у меня нет проблем с доступом к моему частному репозиторию maven — settings.xml и security-settings.xml правильно настроены для этого и других проектов, и этот артефакт драйвера правильно установлен в моем локальном репозитории.

Буду признателен за любое понимание - я думаю, что либо упускаю что-то действительно глупое, либо пытаюсь сделать что-то без поддержки. Интересно, что если я вручную скопирую узел ресурсов из моего локального репозитория maven в то, что мне кажется временным репозиторием сборки проекта (путь нечетный, это <project root>/? ~/repository?/.m2 и да, путь включает вопросительные знаки, пробелы и тильды), развертывание работает .


person rekgm_chan    schedule 17.12.2016    source источник


Ответы (2)


Получается, я пытался сделать что-то глупое, и неподдерживаемое.

Моя конфигурация локального репозитория settings.xml выглядела так (у меня OSX 10.12):

<localRepository>
    /Users/rekgm/.m2/repository
</localRepository>

MavenSettings.java не удаляет пробелы, поэтому MavenResolver, который использует модуль начальной загрузки WF Swarm, не может правильно определить, где находится локальное репозиторий maven, поэтому он попытается повторно загрузить артефакт из удаленный репозиторий maven. Это отлично работает для артефактов, которые находятся в незащищенных удаленных репозиториях, но MavenArtifactUtil.downloadFile() не понимает, что удаленное репо может быть защищено. Отсюда и ошибка, которую я получал.

Я изменил свой файл settings.xml на это:

<localRepository>/Users/rekgm/.m2/repository</localRepository>

и добавил зависимость Oracle к основному проекту pom.xml:

<dependencies>
    ...
    <dependency>
        <groupId>my.repo.group.id</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.1.0</version>
    </dependency>
    ...
</dependencies>

и это устраняет ошибку. Я, вероятно, отправлю сообщение об ошибке и запрос функции в какой-то момент.

person rekgm_chan    schedule 20.12.2016

Я думаю, проблема в том, что настройки безопасности для Maven не используются для извлечения артефакта, поэтому его невозможно найти.

Сказав это, начиная с версии 2016.12.0 существует еще более простой способ настройки драйвера JDBC без написания файла module.xml. Взгляните на https://howto.wildfly-swarm.io/create-a-datasource/, в нем объясняется, как просто добавить зависимость Maven от драйвера JDBC, а затем настроить ее с помощью yml

person Ken    schedule 19.12.2016
comment
Спасибо за это, это отличный совет! - person rekgm_chan; 20.12.2016