我遇到以下情况:我有一个要部署在 jboss eap 7.1 服务器上的 web 项目,在服务器上我创建了一个数据源来连接到数据库,它可以正常工作;我必须修改的表和视图不是使用主键创建的,因此无法使用 JPA 进行映射,这就是为什么我考虑从数据源制作本机 sql 语句的原因,但是,根据我的调查,互联网上,示例总是将连接数据放在 java 代码中,我的问题是如何从服务器上配置的数据源连接到数据库?数据库是oracle 12c
我遇到以下情况:我有一个要部署在 jboss eap 7.1 服务器上的 web 项目,在服务器上我创建了一个数据源来连接到数据库,它可以正常工作;我必须修改的表和视图不是使用主键创建的,因此无法使用 JPA 进行映射,这就是为什么我考虑从数据源制作本机 sql 语句的原因,但是,根据我的调查,互联网上,示例总是将连接数据放在 java 代码中,我的问题是如何从服务器上配置的数据源连接到数据库?数据库是oracle 12c
TL;DR:要访问 JEE 服务器上定义的资源,请使用 JNDI。
虽然概念并不复杂,但技术细节有其细节,我已经很久没有定义这些东西了。无论如何,我认为(因为没有其他答案)最好给你一个可能在某些细节上失败的近似答案,而不是没有答案。
正如我所提到的,您的数据源将在 JNDI 中定义。它通常位于命名空间
java:
(例如java:miDataSource
)或java:jboss/
1内。通过服务器管理控制台,您可以检查 JNDI 元素。要获取数据,有两个选项:
JNDI 纯粹而简单。
(这也适用于访问任何 JNDI 资源)
在服务器上部署/创建数据源时,会为其分配一个 JNDI 名称,并且可以通过此服务访问:
名称问题有些混乱;如果我没记错的话,您可以直接访问“全局”名称(
java:
),但这可能会导致问题;如果您有两个应用程序对不同的数据源使用相同的名称,您将无法将它们放在同一台服务器上。因此,在您的应用程序/webapp 中,您所做的是指明您使用哪个数据源并为应用程序指定一个“本地”名称;例如在
jboss-web.xml
:这将为您创建一个 JNDI 条目,
java:comp/env/jdbc/miDataSourceLocal
这是您在代码中使用的条目:@资源
在服务器管理的实例中(您不创建
new
,但服务器创建,例如 Servlet 和 EJB),您可以使用@Resource
并让服务器注入数据源:这只是自动化您对 JNDI 的访问,因此有关管理名称以避免冲突的部分也适用于此处。
1如果我没记错的话,JBoss 会强迫你这样做。
经过搜索和搜索后,我在此链接http://www.javapractices.com/topic/TopicAction.do?Id=127中找到了我需要的内容