【发布时间】:2026-01-04 09:00:02
【问题描述】:
我们在 Web 容器 (WildFly 14) 中启动了应用程序 Foo。它通过 JNDI 以标准方式获取数据库连接。因此,连接不是在应用程序内部配置的,而是在 WildFly 中配置的。
现在,Foo 在同一台机器上启动了一个外部程序 Bar。这个外部程序完全独立于主应用程序,但需要访问相同的数据库。 Bar 也是通过管道连接到 Foo 的,因此将可序列化的对象从一个传递到另一个是没有问题的。
通过简单的实现,我需要单独配置 Bar 对数据库的访问权限,而不是 Foo。
是否有可能自动将必要的数据库连接参数从 Foo 传递到 Bar?由于我们使用两种不同类型的数据库,这也将包括 JDBC 驱动程序(Foo 从 WildFly 部署中“免费”获取)。加上 JDBC URL、用户名和密码。自动确定其中的一些也会有所帮助。
我们控制并可以更改此设置中的几乎所有内容(Foo 和 Bar 来源,WildFly 配置)。
【问题讨论】:
-
为什么您的外部应用程序也不使用 JNDI 来获取数据源(来自 Wildfly 服务器)? DataSource datasource =(DataSource)initialContext.lookup("java:comp/env/jdbc/demo");
-
因为它作为一个单独的进程运行并且无权访问 WildFly。
-
你的进程,即使是独立的,只需要访问..网络。您的应用程序将包含一个 JNDI 客户端,该客户端通过网络查找远程 JNDI 服务器。属性 jndiProperties = new Properties(); jndiProperties.put(Context.PROVIDER_URL, "
""); InitialContext context = new InitialContext(jndiProperties); -
我对 JNDI 有非常基本的了解,简短的研究表明(对我而言)它非常令人困惑。您能否写一个答案,详细说明在同一台机器上运行的进程如何通过 JNDI 连接到 WildFly 并检索绑定对象?例如。是否需要额外的库等?(另外,我希望进程建立连接后直接与数据库对话,不涉及WildFly,对吧?)
标签: java jakarta-ee jdbc wildfly