我正在使用Jboss AS6和容器管理器tracsaction。 通常我使用的是mysql-ds.xml中定义的单个MYSQL数据源。 现在我有一个用户要求,多个用户可以拥有不同的数据库内容。所以我打算为每个用户创建一个新的数据库。将来我可以改变我的数据库设计。但是现在为了快速解决方案,我需要找到一种在不同数据库之间进行交叉的方法。
这是我的默认配置。我需要更改 dbname
<local-tx-datasource>
<jndi-name>DefaultDS</jndi-name>
<connection-url>jdbc:mysql://144.0.0.1:3306/**dbname**</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>password</password>
<max-pool-size>100</max-pool-size>
<min-pool-size>0</min-pool-size>
<connection-property name="readOnly">false</connection-property>
<autoReconnect>true</autoReconnect>
<failOverReadOnly>false</failOverReadOnly>
<maxReconnects>0</maxReconnects>
<initialTimeout>15</initialTimeout>
<idle-timeout-minutes>0</idle-timeout-minutes>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<!-- should only be used on drivers after 3.22.1 with "ping" support
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
-->
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
</local-tx-datasource>
我正在使用容器管理器transcaction.I需要找到一种方法来更改我的数据源配置的connection-url。然后清除实体管理器以连接新数据库。这可能
答案 0 :(得分:1)
对于您的任务,您实际上可以只持有多个(在您的情况下为5)持久性上下文。然后通过根据用户名选择它来链接到适当的上下文。这是最简单的解决方案。它会工作,但所有5个上下文都是开放的并保持联系。也许这就是你所需要的:从一方面来看,这种环境随时可以使用,不需要加热。
另一个选择是像在Java SE环境中一样手动构建持久性conext。如果您无法保留许多资源并且切换不是那么频繁(例如每天一次),这可能会有所帮助。
您可以找到很多描述如何在Java SE环境中使用JPA的文章。您几乎可以以相同的方式使用它们(因此您不会使用容器注入机制,但通过原始JNDI查找Persistnece Context)
https://dzone.com/articles/jpa-tutorial-setting-jpa-java http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/SettingUpJPA/SettingUpJPA.htm
答案 1 :(得分:0)
我认为您可以使用以下内容:
<connection-url>${connectionURL:jdbc:mysql://144.0.0.1:3306/xyz}</connection-url>
然后将 -DconnectionURL=jdbc:mysql://144.0.0.1:3306/abc 传递到 standalone.sh/bat