首页 文章

从私有安全maven repo安装JDBC驱动程序到Wildfly Swarm

提问于
浏览
1

我正在尝试使用Java Configuration API在Wildfly Swarm(2016.12.0)中安装Oracle JDBC驱动程序 . 驱动程序jar正确安装在远程,私有,安全的maven存储库中 . 我基本上遵循这里的例子:

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

我的项目中有一个带有以下module.xml文件的src / main / resources / modules / com / oracle / ojdbc / main目录:

<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 repo的问题 - 为此项目和其他项目正确配置了settings.xml和security-settings.xml,并且此驱动程序工件已正确安装在我的本地存储库中 .

任何见解将不胜感激 - 我想我试图做一些不受支持的事情 . 有趣的是,如果我手动将资源节点从我的本地maven repo复制到我看来是临时项目构建仓库(路径是奇数,它是 <project root>/? ~/repository?/.m2 ,是的,路径包括问号,空格和波形),部署工作 .

2 回答

  • 0

    事实证明,我试图做一些愚蠢和不受支持的事情 .

    我的settings.xml本地存储库配置看起来像这样(我在OSX 10.12上):

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

    MavenSettings.java不能正确找出当地maven repo所在的位置,因此它会尝试从远程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>
    

    这清除了错误 . 我可能会在某个时候提交错误和功能请求 .

  • 1

    我认为这是一个问题,因为Maven的安全设置没有被用于检索工件,这就是为什么它找不到的原因 .

    话虽如此,自2016.12.0以来,有一种更简单的方法来配置JDBC驱动程序而无需编写module.xml . 看看https://howto.wildfly-swarm.io/create-a-datasource/,它解释了如何添加JDBC驱动程序的Maven依赖关系,然后使用yml配置它

相关问题