无法在 Wildfly 10 上定义 oracle 数据源

Posted

技术标签:

【中文标题】无法在 Wildfly 10 上定义 oracle 数据源【英文标题】:Unable to define oracle datasource on Wildfly 10 【发布时间】:2017-04-07 07:14:21 【问题描述】:

我正在使用 wildfly-10.1.0.Final,我正在尝试添加一个 oracle 数据源:

<datasource jndi-name="java:jboss/datasources/OracleDS" pool-name="OracleDS" enabled="true">
                <connection-url>jdbc:oracle:thin:@localhost:1523/pdborcl</connection-url>
                <driver>oracle</driver>
                <pool>
                    <min-pool-size>1</min-pool-size>
                    <max-pool-size>5</max-pool-size>
                    <prefill>true</prefill>
                </pool>
                <security>
                    <user-name>admin</user-name>
                    <password>admin</password>
                </security>
            </datasource>

还有司机:

    <driver name="oracle" module="com.oracle.ojdbc">
                    <driver-class>oracle.jdbc.OracleDriver</driver-class>
                </driver>

我在 modules/com/oracle/ojdbc/main 下有一个模块:

<module xmlns="urn:jboss:module:1.1" name="com.oracle.ojdbc">
  <resources>
    <resource-root path="ojdbc7.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

但是当我启动服务器时,我得到:

11:14:30,226 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("data-source" => "OracleDS")
]) - failure description: 
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.oracle"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "org.wildfly.data-source.OracleDS is missing [jboss.jdbc-driver.oracle]",
        "jboss.driver-demander.java:jboss/datasources/OracleDS is missing [jboss.jdbc-driver.oracle]"
    ]

11:14:30,228 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("data-source" => "OracleDS")
]) - failure description: 
    "WFLYCTL0412: Required services that are not installed:" => [
        "jboss.jdbc-driver.oracle",
        "jboss.jdbc-driver.oracle"
    ],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "org.wildfly.data-source.OracleDS is missing [jboss.jdbc-driver.oracle]",
        "jboss.driver-demander.java:jboss/datasources/OracleDS is missing [jboss.jdbc-driver.oracle]",
        "org.wildfly.data-source.OracleDS is missing [jboss.jdbc-driver.oracle]"
    ]

我已经阅读了所有类似的主题,包括这个:Unable to define oracle datasource on Jboss AS 7。但是,我似乎找不到解决方案。

【问题讨论】:

你明白了吗?我好像有同样的问题... 好的,我想我是在以下人员的帮助下做到的:***.com/questions/35371584/… 有时需要重启服务器才能生效。 对我来说它也不起作用。我有一个在 Wildfly 8.2 下运行的 mysql 和 Oracle 模块——现在我想从 Wildfly 10 开始,但模块无法识别。在 wildfly 8 中,服务器在启动时说“JBAS010417: Started Driver service with driver-name = oracle” - 在 wildfly 10 上,我只得到“h2”驱动程序。 顺便说一句,因为我用 MySQL/Oracle-Driver 制作了 ~3 wildfly 8 - 模块必须没问题。我只将模块复制到wildfly 10,所以它们应该也可以在那里工作。文档说没有什么不同。目前我认为这是一个错误。 【参考方案1】:

正如我在上面的评论中所述,我遇到了同样的问题 - 我在 Wildfly 8 上工作的驱动程序模块在 Wildfly 10 下无法工作。

我现在有一个解决方法(/解决方案?) - 请参阅 https://docs.jboss.org/author/display/WFLY10/DataSource+configuration:

我只是像使用 EAR 或 WAR 一样部署了 ojdbc7.jar(使用了管理前端 http://localhost:9990)。

然后我的服务器识别了驱动程序

WFLYJCA0004:部署符合 JDBC 的驱动程序类 oracle.jdbc.OracleDriver (version 12.1) Started Driver service with 驱动程序名称 = ojdbc7-12.1.0.1.jar

我可以定义一个非 XA 数据源(配置 -> 子系统 -> 数据源)并且它可以工作。 我真的不知道这种部署是否有任何缺点。但我的 arquillian 测试用例似乎有效。

在 wildfly 10 中,我看不到任何编辑现有数据源的可能性,并且服务器要求我在每次配置更改时重新启动.... 管理 gui 中甚至缺少用于验证连接等的配置选项?!

【讨论】:

我的模块现在也可以工作了。我必须将它添加到配置中(standalone.xml): [...] oracle.jdbc。 xa.client.OracleXADataSource【参考方案2】:

另一种方法:

登录 WildFly CLI

./jboss-cli.sh -c

部署 Oracle JDBC 驱动程序

deploy /path_to_the_file/ojdbc7.jar

创建一个配置了一个连接池的 JDBC 数据源

data-source add \
--name=MyOracleDataSource \
--jndi-name=java:/datasources/MyOracleDataSource \ 
--driver-name=ojdbc7.jar \ 
--driver-class=oracle.jdbc.OracleDriver \ 
--connection-url=jdbc:oracle:thin:@ORACLE_SERVER_NAME:1521/ORACLE_SERVICE_NAME \ 
--user-name=ORACLE_USER_NAME \ 
--password=ORACLE_USER_PASSWORD \ 
--allocation-retry=3 \ 
--background-validation=true \ 
--background-validation-millis=60000 \ 
--capacity-incrementer-class=org.jboss.jca.core.connectionmanager.pool.capacity.WatermarkIncrementer \ 
--capacity-decrementer-class=org.jboss.jca.core.connectionmanager.pool.capacity.WatermarkDecrementer \ 
--check-valid-connection-sql='SELECT 1 FROM dual' \ 
--connectable=false \ 
--enlistment-trace=true \ 
--exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter \ 
--flush-strategy=EntirePool \ 
--jta=true \ 
--initial-pool-size=2 \ 
--min-pool-size=2 \ 
--max-pool-size=5 \ 
--mcp=org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool \ 
--pool-prefill=true \ 
--pool-use-strict-min=true \ 
--set-tx-query-timeout=false \ 
--share-prepared-statements=false \ 
--spy=false \ 
--stale-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker \ 
--statistics-enabled=true \ 
--track-statements=NOWARN \ 
--tracking=false \ 
--use-ccm=true \ 
--use-fast-fail=false \ 
--use-java-context=true \ 
--valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker \ 
--enabled=true

【讨论】:

以上是关于无法在 Wildfly 10 上定义 oracle 数据源的主要内容,如果未能解决你的问题,请参考以下文章

从 Wildfly 10 中排除所有模块

当我无法访问 CLI 工具时,如何关闭 JBoss Wildfly?

无法将 JSF + CDI 项目从 Tomcat 迁移到 Wildfly

我无法让会话复制与 Wildfly 10 一起使用

Wildfly 10 中的 Hibernate 4.3 支持

将 Wildfly 10 主页替换为包含在 ear 文件中的自定义应用程序