我的设置如下:
- 我得到了一个应用程序,它部署在
/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驱动程序,如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安装的上下文中这样做的,它使用一个自实现的用户联盟来访问一个单独的(遗留的)用户数据库。
实现我灵活使用jdbc-driver的目标的正确方法是什么?
**编辑:**提到,删除jboss-deployment-structure.xml
不起作用。
3条答案
按热度按时间l0oc07j21#
Keycloak有一个设计得非常好的容器。你可以从它那里获得部署的灵感。只要看看Dockerfile如何安装数据库驱动模块,以及稍后如何使用jboss_cli激活这些模块。
当然,如果可以的话,也可以使用容器来代替,只要确保包含驱动程序的module.xml,并在启动时通过提供自己的入口点来激活它。
68bkxrlz2#
我建议你应该把所有的数据库驱动程序作为模块单独安装。单独的模块将帮助你在将来很容易地跟踪和升级驱动程序jar。
只要你的应用程序没有任何类加载问题,你就不需要在
jboss-deployment-structure.xml
文件中提到这些驱动程序。它们是 * 静态模块 *,将在服务器启动时加载。而且,安装完驱动模块后,还需要在standalone.xml文件中添加条目,比如我安装了Oracle驱动,那么
在标记内添加数据源定义(ExampleDS旁边):
14ifxucb3#
至少我使用了上面提到的两种
jboss-deployment-structure.xml
方法的混合解决方案,如下所示我列出了所有相关的数据库驱动程序作为可选模块,并列出了另一个灵活命名的驱动程序(如果需要驱动程序),这在上面的列表中没有提到。