【发布时间】:2019-07-15 15:05:09
【问题描述】:
我的设置如下:
- 我有一个应用程序,我部署在
/standalone/deployments - 我在
/standalone/deployments中部署的jboss-deployment-structure.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
[...]
<module name="org.postgresql"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
完全删除
jboss-deployment-structure.xml(因为如果没有类加载问题就不能使用它),是行不通的。我在驱动旁边使用了更多的依赖项(keycloak),然后就找不到了。我的模块
org/postgresql/main中的module.xml看起来像这样(如https://www.keycloak.org/docs/4.8/server_installation/index.html#package-the-jdbc-driver 中所述)
<?xml version="1.0" encoding="UTF-8"?>
<module name="org.postgresql" xmlns="urn:jboss:module:1.5">
<resources>
<resource-root path="postgresql-42.2.5.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
- 我的要求是,允许不同类型的 jdbc-drivers,例如postgres、oracle、mssql。
第一个选项:
我可以将我的jboss-deployment-structure.xml 更改为
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
[...]
<module name="org.postgresql" optional="TRUE"/>
<module name="com.oracle.ojdbc6" optional="TRUE"/>
[...]
</dependencies>
</deployment>
</jboss-deployment-structure>
(添加了可选参数)
然后我必须明确允许所有驱动程序。似乎不是最好的方法。
这个想法来自标准documentation。
第二个选项:
我将我的模块路径更改为driver/jdbc/main(而不是org/postgres/main),并将module.xml 更改为
<module name="driver.jdbc" xmlns="urn:jboss:module:1.5">
[...]
</module>
(模块名称已更改)
并使用我的 jboss-deployment-structure.xml 中的模块引用,例如
<jboss-deployment-structure>
[...]
<module name="driver.jdbc"/>
[...]
</jboss-deployment-structure>
现在我强迫我的客户按照我的建议命名驱动程序模块。他们不能像每个标准文档中提到的那样命名模块。
这个想法来自这个question。
我在 keycloak 安装的上下文中执行此操作,并使用自行实现的用户联合来访问单独的(旧版)用户数据库。因此,如上所述,删除jboss-deployment-structure.xml 不是选项。
使用 jdbc-driver 实现灵活目标的正确方法是什么?
编辑:提到,删除jboss-deployment-structure.xml 不起作用。
【问题讨论】:
标签: jdbc jboss wildfly keycloak