使用JOTM为Servlets增加事务支持(3)

原创 2004年04月20日 23:19:00

表示层<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

在表示层,由两个JSP文件组成:

atm.jsp:现金支取应用,用于发送用户信息和需要支取的现金数额到bar.CashDelivery类,并显示用户操作的结果。

admin.jsp:管理控制台用于显示和更新与两个资源有关的信息。(并非程序设计的一部分,但是必须要添加以便使资源更新操作变得简单,比如向用户账户存钱)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-4-201429470.jpg

1  应用程序设计

 

配置数据库

关于数据库,我们使用MySQL <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.0.12和附带的JDBC驱动。MySql缺省不提供事务支持,为了让其支持事务,在创建表的时候必须声明是InnoDB类型。另外,为了能够提供InnoDB类型支持,你必须将MySQL配置文件(my.cnf)中的#skip-innodb一行注释起来。

在本例中设置MySQL用户为javauser,口令为javaude,需要确认该用户已经被创建并且具有创建数据库的权限。

创建数据库和表的脚本在示例文件的scripts/目录下。运行脚本文件将会创建account表并插入两条用户记录:

john_doe账户上有100

jane_doe账户上有600元。

 

示例二:创建account

脚本文件同样会创建ATM表,并提供可以支取500元现金的记录:

 

示例三:创建atm

mysql> CREATE DATABASE atmtest;

mysql> USE atmtest;

mysql> CREATE TABLE atm(

    -> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

    -> cash INT) TYPE=InnoDB;

mysql> INSERT INTO atm VALUES(null, 500);

mysql> SELECT * FROM atm;

+----+------+

| id | cash |

+----+------+

|  1 |  500 |

+----+------+

最后,你需要拷贝JDBC驱动到$Tomcat安装目录$/shared/lib目录下。

 

获取并安装Tomcat

本文基于Tomcat 4.1.18及以上版本编写,请确认你没有使用以前的版本,安装Tomcat并没有任何特殊之处,只需要下载并解压缩就可以了。

 

获取并安装JOTM

为了要使用JOTM,你必须从最新的二进制发行版下载并解压缩,从lib目录拷贝*.jar文件(除了log4j.jarcommon-cli.jarjotm_iiop_stubs.jar之外)到$Tomcat安装目录$/shared/lib目录下,一切都完成了。

 

配置Tomcat

你现在需要配置Tomcat以便使其能够从JNDI中获取UserTransactionDataSource对象(用于foo.BankAccountbar.ATM中)。

首先,告诉Tomcat在你的Web应用中会用什么JNDI名字寻找数据源。这项工作在web.xml文件中完成,下面列出了web.xml文件的内容。对于银行账户数据源,JNDI名字为java:comp/env/jdbc/bankAccount,但是你只需要给出在java:comp/env/之后的名字。Tomcat会使用JNDI机制解析余下部分的内容。对于ATM数据源也同样处理。

 

示例四web.xml

<web-app>

    <resource-env-ref>

        <description>Bank Account DataSource</description>

        <resource-env-ref-name>jdbc/bankAccount</resource-env-ref-name>

        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>

    </resource-env-ref>

 

    <resource-env-ref>

        <description>ATM DataSource</description>

        <resource-env-ref-name>jdbc/ATM</resource-env-ref-name>

        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>

    </resource-env-ref>

</web-app>

现在你需要告诉Tomcat如何检索定义在web.xml中的资源,这些工作在bank.xml文件中完成,下面列出了bank.xml文件的内容。对于银行账户和ATM资源,必须设置正确的参数以便Tomcat将数据源与你的Web应用联系起来。更详细的描述可以在Tomcat JNDI How-to文档中找到。

 

有一个参数非常特别:factory。使用该参数设置的类会在Web应用查找JNDI时创建一个数据源。另一个在web.xml中描述的重要资源是UserTransaction。这项资源被java:comp/UserTransaction用来区分是否使用事务支持。该项资源的实现是JOTM提供的。

 

示例五bank.xml

 

 

 

 

分布式事务JTA 实现之 JOTM

JOTM介绍 JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且开源的事务管理器。 JOTM 提供了以下功能,有助于增强 WEB 应...
  • conquer0715
  • conquer0715
  • 2015年09月05日 17:53
  • 4875

JOTM分布式事务管理(多数据源)配置

项目接近尾声,老大让我们几个研究一些新技术,以便为将来项目的扩展做打算,我被分配到JOTM这一块。说实话,自己对分布式事务也不了解,至于JTA,只是了解概念。 至于什么是JOTM、JOTM有什么...
  • z69183787
  • z69183787
  • 2014年04月02日 10:43
  • 770

在Spring中使用JOTM实现JTA事务管理

Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻。但是很大部分人都还认为脱离Java EE应用服务器...
  • zmx729618
  • zmx729618
  • 2016年07月19日 16:19
  • 2041

Spring分布式事务实现jotm,atomikos

分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持。如果使用...
  • zhousenshan
  • zhousenshan
  • 2017年05月06日 09:08
  • 490

为什么要使用memcache

1.为什么要使用memcache 由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如: 1)对数据库的高并发读写: 关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析SQL语句...
  • adminyan
  • adminyan
  • 2016年12月15日 10:29
  • 491

使用JOTM进行Tomcat的JTA调用

前段时间碰到一个需要访问多个数据库的例子,由于项目上是采用tomcat作为项目开发和布署,所以就没有考虑采用特定厂商的JTA实现,而是通过一个开源的JTA实现来完成tomcat和多个数据库之间的直接交...
  • andymu077
  • andymu077
  • 2015年07月20日 11:12
  • 1334

Kafka事务简介

说明:本文翻译Confluent官网,原文地址: https://www.confluent.io/blog/transactions-apache-kafka/   在之前的博客文章(见尾部链...
  • ransom0512
  • ransom0512
  • 2017年12月19日 10:42
  • 847

Redis的事务(部分支持)

关于Redis事务一些小小的总结 一说到事务,肯定想到的是像传统关系型数据库那样,要么全部成功,要么全部失败。事务的四大特性ACID信手拈来。但这里对不起了,Redis事务可跟关系型数据库不太一...
  • hacfox
  • hacfox
  • 2017年04月06日 00:59
  • 370

在Tomcat中透过JOTM支持JTA

http://www.myexception.cn/program/676856.html 在Tomcat中通过JOTM支持JTA     Tomcat是Servlet容器,但它提供了JNDI的...
  • Baple
  • Baple
  • 2015年01月16日 10:39
  • 2021

分布式事务操作之Spring+JTA+mybatis

一、技术背景 在项目中需要操作多个数据库,同时,需要保证操作的原子性,保证对多个数据库的操作一致性,而传统的JDBC事务被限定在一个单一的数据库连接中,故引用JTA,即Java Transact...
  • zhaoliangbao2778
  • zhaoliangbao2778
  • 2016年04月14日 15:49
  • 7060
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用JOTM为Servlets增加事务支持(3)
举报原因:
原因补充:

(最多只允许输入30个字)