简介Java多线程在交易中间件测试中的应用

引言

随着信息系统的结构的日益复杂和规模的不断扩大,交易中间件在复杂系统的应用也越来越广。交易中间件 作为一个中间层的系统,在接收客户端请求时,通常需要做一些负载控制和用户缓存的一些功能。对于软件测试人员来说, 测试交易中间件时,避免不了模拟客户端在高负载情况下的一些有规律或随机的行为。这些测试有时是功能性验证测试 (Functional Verification Test),有时也涉及到性能测试 (Performance Test)。

本文将介绍如何使用 Java 语言 编写多线程的自动化测试脚本,并且使用线程池模拟一些特殊的有规律的测试场景。

本文首先会简单的介绍交易中 间件及 Java 多线程编程的概念。接着提出项目中遇到的问题。然后就碰到的问题,使用 Java 多线程技术模拟测试场景。 解决这个问题后,就类似的问题提出推广的思路。

本示例的必备条件

Java 的多线程应用范围很广,交易中 间件的种类也有许多。本文 JDK 的版本是 JDK5,原因是 JDK5 中加入了比较丰富的多线程并发工具。目前,JDK 的最新版 本是 JDK7,其中又增加了许多工具包括 Phaser、ThreadLocalRandom、ForkJoinPool、以及 TransferQueue 等,但是如果 掌握了 JDK5 的多线程工具,对 JDK7 的工具也一定不会陌生了。

本文的交易中间件是以 IBM Information Management System(IMS)的 TM 为示例,这个示例是为您创建一个学习的场景,当然 Java 的多线程应用的范围非常广泛 ,不限于这一种交易中间件。在本文的推广部分,也另外假设了一个场景,并加以实现。

如果您也需要以 IMS TM 来测试,请确保提供以下的测试环境。

需要在 Windows 上安装的软件:

JDK 1.5(或者更新的版本)

Rational Functional Tester V7.0(或者更新的版本)

需要在 IBM z/OS 上安装的环境:

IMS Version 9 (或者更新的版本)

IMS Connect Version 9 (或者 更新的版本)

OTMA

TCP/IP

概念介绍

交易中间件

中间件的产品种类很多,根据中间件 在系统中所起的作用和采用的技术不同,大致划分为五大类:数据库中间件 (Database Middleware,DM)、远程过程调用中 间件 (Remote Procedure Call, RPC)、基于对象请求代理 (Object Request Broker, ORB)、中间件与交易中间件 ( Transaction Processing Monitor, TPM, 也称事务处理中间件 )。

交易中间件是一种复杂的中间件产品,通常是在 负载的环境下运用分布式应用的速度和可靠性来实现的。交易中间件向用户提供一系列的服务,包括通信服务、日志服务、 系统服务和交易服务等。

交易中间件的通信主要是基于 TCP/IP 的 socket 技术和基于消息传递与排队机制实现的 ,其通信的过程如图 1 所示:

图 1. 交易中间件通信过程

交易中间件端通常有侦听方法在监听客户端 的连接请求,返回一个连接后并生成一个相应的客户服务进程。在接收到客户端的数据后,对数据进行分割、加密、封装成 消息包。然后做分发、入队、发送等操作。

时间: 2024-10-24 17:34:09

简介Java多线程在交易中间件测试中的应用的相关文章

java多线程技术在当前应用中所发挥的作用

问题描述 大家好,请教一个问题?关于java多线程技术在当前应用上发挥的作用大吗?他的当前使用状况怎么样呢?发展前景怎样呢? 解决方案 解决方案二:做web开发,基本上不需要自己写多线程,基本上是容器实现,网络编程/游戏开发,用的应该比较多了,比如想在手机上写一个像样的基于J2ME的游戏,不用多线程怎么做?解决方案三:请问:有没很好的博客地址让我赏读下呢?关于java多线程技术当前的应用(有成功的案例才好)以及今后的发展情况!楼上,谢喽解决方案四:你要了解javaEE的servlet机制就是建立

深入浅出Java多线程(2)-Swing中的EDT(事件分发线程)

本文主要解决的问题是: 如何使其Swing程序只能运行一个实例? 抛开Swing,我们的程序是通过java 命令行启动一个进程来执行的,该问题 也就是说要保证这个进程的唯一性,当然如果能够访问系统的接口,得到进程的 信息来判断是否已有进程正在运行,不就解决了吗?但是如何访问系统的接口呢 ?如何要保证在不同的平台上都是OK的呢?我的思路是用文件锁,当然我相信肯 定有更好的方法,呵呵,希望读者能够指出. 文件锁是JDK1.4 NIO提出的,可以在读取一个文件时,获得文件锁,这个锁 应该是系统维护的,

java 多线程 session共享

问题描述 java 多线程 session共享 在struts2中,启动新的线程 调用ServletActionContext.getRequest() 报空指针错误 解决方案 这个共享的缓存数据是否进程共享的,是不是只能某个线程私有的地址了 解决方案二: Java 多线程 变量共享java多线程共享全局变量java多线程的共享变量访问控制实例 解决方案三: 由于是并发的,当开启线程A(有session)后,再开启线程B,你得确定线程B开启的时候,此时A线程中已经初始化了session及其中想获

一个java多线程的问题

问题描述 一个java多线程的问题 为什么代码中线程VolatileExample 不会终止 package thread; public class VolatileExample extends Thread{ private static boolean flag = false; @Override public void run() { while (!flag) { //System.out.println(1); } } public static void main(String

深入探讨Java多线程中的volatile变量_java

volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性. 什么是线程的可见性: 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility).互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据.可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 -- 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前

浅谈Java多线程编程中Boolean常量的同步问题_java

在JAVA中通过synchronized语句可以实现多线程并发.使用同步代码块,JVM保证同一时间只有一个线程可以拥有某一对象的锁.锁机制实现了多个线程安全地对临界资源进行访问.   同步代码写法如下:   代码1: Object obj = new Object(); ... synchronized(obj) { //TODO: 访问临界资源 } JAVA的多线程总是充满陷阱,如果我们用Boolean作为被同步的对象,可能会出现以下两种情况:   一. 以为对一个对象加锁,实际同步的是不同对

关于java多线程中的join方法

问题描述 关于java多线程中的join方法 1.主线程可能在子线程结束之前 结束吗?如果可能的话 举一个例子 2.如何理解join方法, 结合实际应用. 非常感谢非常感谢!!! 解决方案 关于join,参考:http://www.blogjava.net/jnbzwm/articles/330549.html 解决方案二: 主线程可能在子线程结束之前 结束吗 一般来说不可以,但是也不一定,如果子线程在执行finally中的代码,应该会等它执行完了才退出. 晕,join方法和什么"让主线程等子线

Java多线程编程中synchronized线程同步的教程_java

0.关于线程同步 (1)为什么需要同步多线程?线程的同步是指让多个运行的线程在一起良好地协作,达到让多线程按要求合理地占用释放资源.我们采用Java中的同步代码块和同步方法达到这样的目的.比如这样的解决多线程无固定序执行的问题: public class TwoThreadTest { public static void main(String[] args) { Thread th1= new MyThread1(); Thread th2= new MyThread2(); th1.sta

详解Java多线程编程中线程的启动、中断或终止操作_java

线程启动: 1.start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.start()不能被重复调用. run() : run()就和普通的成员方法一样,可以被重复调用.单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程! 下面以代码来进行说明. class MyThread extends Thread{ public void run(){ ... } }; MyThread mythread = new