在容器外部定义 jta 数据源

2023-11-30

我们的应用程序当前使用在 JBossstandalone.xml 中定义的数据源,基本上我们需要在应用程序中而不是在容器中定义它一段时间。我们当前的设置是;

应用程序上下文.xml;

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
        <property name="persistenceUnitName" value="rtsPersistenceUnit" />
        <property name="packagesToScan">
            ...
         </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="ORACLE" />
                <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect"/>
            </bean>
        </property>
</bean>

持久性.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="rtsPersistenceUnit" transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <jta-data-source>java:/jdbc/RTSdb</jta-data-source>

        <class>...</class>

        <exclude-unlisted-classes>true</exclude-unlisted-classes>

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="validate" />
            <property name="hibernate.transaction.flush_before_completion" value="true" />
        </properties>

    </persistence-unit>

</persistence>

数据源.xml:

<bean id="rtsDatasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
    <property name="url" value="..."/>
    <property name="username" value="..."/>
    <property name="password" value="..."/>
</bean>

基本上我想要的只是这条线

<jta-data-source>java:/jdbc/RTSdb</jta-data-source>

从 datasource.xml 读取而不是进入容器(JBoss)。 看起来很简单,但在阅读了一些 Spring 和 Oracle 文档后,我找不到答案。


是的,您可以使用符合 JTA 的事务管理器,例如 Atomikos 或 Bitronix。他们各自的站点有关于如何使用 Spring 配置它们的文档。一般来说,您必须遵循以下步骤(如果使用 Atomikos):

  1. 保留现有的 XA 数据源(rtsDatasource如果尚未使用,则创建一个(例如,如果某人拥有非 XA 数据源,则必须首先将该数据源转换为 XA 数据源)。
  2. 将 XA 数据源包装在AtomikosDataSourceBean.
  3. 点你的EntityManagerFactory在新的AtomikosDataSourceBean实例。
  4. 声明一个 XA 事务管理器和一个 XA 用户事务。
  5. 将 XA 事务管理器包装在 Spring 中JtaTransactionManager.
  6. 使用弹簧JtaTransactionManager.

下面显示了使用 H2 数据库、Hibernate 4、Spring 4 和 Atomikos 4 的简短配置片段。

<bean class="org.h2.jdbcx.JdbcDataSource" id="originalDataStore" lazy-init="true">...</bean>

<bean class="com.atomikos.jdbc.AtomikosDataSourceBean" id="dataSource" init-method="init" destroy-method="close">
  <property name="uniqueResourceName" value="xaDS"/>
  <property name="xaDataSource" ref="originalDataStore"/>
  <property name="poolSize" value="3"/>
</bean>

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
  <property name="dataSource" ref="dataSource"/>
  <property name="jpaProperties">
    <props>
      <prop key="hibernate.transaction.jta.platform">com.atomikos.icatch.jta.hibernate4.AtomikosPlatform</prop>
       ...
    </props>
  </property>
</bean>

<bean class="org.springframework.transaction.jta.JtaTransactionManager" id="transactionManager">
  <property name="transactionManager">
    <bean class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">
      <property name="forceShutdown" value="false"/>
    </bean>
  </property>
  <property name="userTransaction">
    <bean class="com.atomikos.icatch.jta.J2eeUserTransaction">
      <property name="transactionTimeout" value="300"/>
    </bean>
  </property>
  <property name="allowCustomIsolationLevels" value="true"/>
</bean>

<transaction:annotation-driven transaction-manager="transactionManager"/>

详细信息,您可以查看this app.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在容器外部定义 jta 数据源 的相关文章

随机推荐

  • 不同终端的不同 nCurses 行为

    我使用不同的终端获得两种不同的行为 这是我的代码 use ncurses initscr curs set 0 noecho start color define win newwin 20 50 1 1 wclear win box wi
  • 如何解决 Capybara::ElementNotFound 错误

    我遇到了以下问题 这是我第一次使用水豚 你知道我如何解决这个问题吗 谢谢 我使用 Rails 3 0 0 和以下 gem gem rails 3 0 0 gem capybara gem database cleaner gem cucum
  • 整数到字符串在综合中出错(宽度不匹配)

    我正在尝试将整数转换为字符串 使用integer image val 并将其填充或限制为特定长度 我已经制作了这个函数 当我使用时它可以很好地完成工作report陈述并模拟 function integer2string pad val i
  • 如何以编程方式拒绝来电android

    android 是否可以通过代码拒绝来电 请帮助我已经完成了一些教程 但它们对我不起作用 是的 伙计 可以尝试这个http androidsourcecode blogspot in 2010 10 blocking incoming ca
  • 德国引号在tinytex/rmarkdown 中被破坏 - 即使使用包“csquotes”

    我想要的是 我想通过 MacOS Catalina 上的 rmarkdown 和tinytex 在我的 TeX PDF 中添加德语引号 参见示例 问题 它曾经按照指导方针工作如此处提议的 但现在 它不再起作用了 我只得到英文引号 但是not
  • CSS中伪元素前的“&”是什么意思?

    以下 CSS 取自推特引导程序与号 字符的含义是什么 clearfix zoom 1 before after display table content after clear both That s LESS 而不是 CSS 此语法允许
  • 会话变量未从 http://www.xxxx.com 转移到 http://xxxx.com

    我网站上的一些用户让我意识到了这个问题 许多用户进入他们的浏览器http xxxx com然后登录 然后他们可能会点击一个链接 将他们带到http www xxxx com它要求他们再次登录 这是以前有人遇到过的已知问题吗 我尝试用谷歌搜索
  • PCIe 总线上的写入是原子的吗?

    我是 PCIe 的新手 所以这可能是一个愚蠢的问题 这似乎是询问有关 PCIe 接口的相当基本的信息 但我无法找到答案 因此我猜测我缺少一些使答案显而易见的信息 我有一个系统 其中有一个 ARM 处理器 主机 通过 PCIe 设备 与 Xi
  • 在 C# 中读取 Excel 文件时出现问题

    我正在使用此代码读取带有 OLEDB 连接的 Excel 文件 var connectionString string Format Provider Microsoft Jet OLEDB 4 0 data source 0 Extend
  • 获取聚合中嵌套数组的总和

    好吧 我有一个似乎无法解决的问题 我有一个这样的文档 playerId 43345jhiuy3498jh4358yu345j leaderboardId 5b165ca15399c020e3f17a75 data type Eclectic
  • .NET 安装包有时无法完全删除以前的版本

    我使用 VS2008 安装包分发我的应用程序 通常效果很好 当我创建应用程序的新版本时 我会进入并增加Version安装包上的属性并验证RemovePreviousVersions属性设置为 True 这在大多数情况下都工作得很好 我只是运
  • 将位图保存到 MemoryStream 时发生 GDI+ 异常

    我在 Windows 窗体应用程序中遇到问题 当我保存到 MemoryStream 时 Bitmap Save 失败 该问题似乎只间歇性地发生在一台机器上 到目前为止 而坏消息是在客户站点上 我无法在机器上进行调试 但我得到了堆栈跟踪 将问
  • Android NDK 和渲染到动态壁纸

    我只是在寻找开始学习 NDK 的机会 并考虑到一个特定的项目 我想从 NDK 端不断渲染变化的位图 以便能够在动态壁纸中显示它 因此我在这里讨论的不是渲染到 OpenGL 纹理 而是渲染到位图 我用谷歌搜索了一下 发现有一个选项可以直接操作
  • 如何在 ES6 类中创建“公共静态字段”?

    我正在创建一个 Javascript 类 我想要一个像 Java 中那样的公共静态字段 这是相关代码 export default class Agent CIRCLE 1 SQUARE 2 这是我得到的错误 line 2 col 11 C
  • XPath 中 .// 和 //* 有什么区别?

    通过 Firebug 查找相对 XPath 时 它会创建类似 id Passwd 如果我们在开头不使用点它的含义会怎么样 只需添加 在 Xpath 中 它突出显示 各种页面元素 代表什么 以下是 Gmail 密码字段的 XPath 有什么意
  • 如何使用 Retrofit 2.0 解析 XML 响应?

    您好 我是 Android 编程新手 我已经浏览了一些有关如何使用改造解析 XML 响应的链接 并且我尝试了下面的 XML 如图所示 我需要在 POJO 类中做任何必要的更改吗 但我在 Logcat 中收到 NullPointer 异常 当
  • NullPointerException 使用模拟上下文创建 AppCompatImageView

    我收到了NullPointerException当我尝试创建一个AppCompatImageView带着嘲笑Context在测试中 与正常人做同样的事情ImageView works 本次测试通过 import android conten
  • 在 Azure Front Door 后面设置多个 Web 应用程序的正确方法是什么?

    我有 3 个后端池 1 个是 API 2 个是 Web 应用程序 我已在 Azure Front Door 中设置路由以路由到正确的区域 但如何修改 Web 应用程序以对所有链接使用 Front Door URL 而无需手动对它们进行硬编码
  • C++“命名空间范围”

    C 规范 http www open std org jtc1 sc22 wg21 docs papers 2011 n3242 pdf 第 7 5 4 节 指出 链接规范只能出现在名称空间范围内 命名空间范围 到底是什么意思 这是否意味着
  • 在容器外部定义 jta 数据源

    我们的应用程序当前使用在 JBossstandalone xml 中定义的数据源 基本上我们需要在应用程序中而不是在容器中定义它一段时间 我们当前的设置是 应用程序上下文 xml