gpt4 book ai didi

java - 在EJB项目中使用Jboss动态加载DataSource

转载 作者:行者123 更新时间:2023-11-30 04:59:58 26 4
gpt4 key购买 nike

让我们考虑一下我有一个主数据库和一个表。

我在 jboss 的部署目录中创建了一个数据源 xml 文件,并将 ejb 项目放入该数据源的 persistance.xml 中。

在我的 ejb 项目中,我使用 @PersistenceContext 并使用该实体管理器加载这个表。表里面是一些数据源名称(数据源名称是jndi数据源名称?)我之前也在deploy目录中创建。加载其他数据源名称的这个 bean 现在调用其他 ejb,并向它们传递表中的数据源名称之一。

这个其他 ejb 现在应该使用给定的数据源名称而不是 persistance.xml 内部的名称连接到该数据库。

换句话说:我想在一个 ejb 中加载数据源名称。然后我想调用其他ejb,每个ejb应该连接到不同的数据源。

非常感谢,豪克

最佳答案

我不太确定你在这里追求什么,所以需要注意的是,听起来你正在尝试做一些有点疯狂的事情(JPA 不喜欢运行时的动态)。

但是,有几个选项:我听到的是您想要更改与数据库的连接。首先,持久性 XML 只是一个起点,您不必包含数据源。这不是最佳实践,因为 DataSource 和 datasourse-ds.xml 的想法是确保您可以配置应用程序而无需重新编译代码(以及多个部署等...)。如果您接管管理连接的工作,您可以使用实体管理器。

我只是想澄清这可能是一个坏主意(在本例中您谈论的是 ORM 框架 - JPA Hibernate),但您可以提供自己的实体管理器,而不是使用 @PersistenceContext。我强烈建议考虑使用 EclipseLink 作为解决此问题的方法。它没有嵌入 JBoss,您将能够(一旦运行)从头开始配置它。

http://wiki.eclipse.org/EclipseLink

一旦运行它,您就可以主动创建和销毁实体管理器,或者从连接的属性创建多个实体管理器。

总而言之:我认为您正在走一条非常糟糕的道路,您可能需要重新考虑设计。 JPA 可能是一个错误的工具,尽管我不愿意这么说,但如果您经常更改连接,那么使用 javax.sql 可能比使用 JPA 数据源更好。

无论如何,使用 Eclipselink2.X 你可以做如下的事情 ->

HashMap<String, Object> connectionA new = HashMap<String, Object>();
propsA.put("javax.persistence.jdbc.driver", "driverClass");
propsA.put("javax.persistence.jdbc.url", "connectionString");
. . .
etc...
EntityManager entityManager = Persistence.createEntityManagerFactory("myUnit").
createEntityManager(propsA);

此时,您可以为每个所需的管理器创建一组新的属性(使用新的连接支持)。

噩梦?是的。容器管理?不——你将负责处理交易,但这应该有效吗?绝对可以。

关于java - 在EJB项目中使用Jboss动态加载DataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com