TUXEDO名字的由来:Transaction for UNIX has been Extended for Distributed Operation,即被分布式操作扩展之后的UNIX事务系统 。 最早具有中间件技术思想及功能的软件是IBM的CICS,但由于CICS不是分布式环境的产物,因此人们一般把Tuxedo作为第一个严格意义上的中间件产品。 Tuxedo是1984年在当时属于AT&T的贝尔实验室开发完成的,但由于分布式处理当时并没有在商业应用上获得像今天一样的成功,Tuxedo在很长一段时期里只是实验室产品,后来被Novell收购,在经过Novell并不成功的商业推广之后,1995年被现在的BEA公司收购。尽管中间件的概念很早就已经产生,但中间件技术的广泛运用却是在最近10年之中。BEA公司1995年成立后收购Tuxedo才成为一个真正的中间件厂商。随着Oracle收购了BEA公司,Tuxedo目前已经成为Oracle公司产品。
Tuxedo是什么
Tuxedo是一个客户机/服务器的“中间件”产品,它在客户机和服务器之间进行调节,以保证正确地处理事务。Tuxedo是一个事务处理(TP)监督器,它管理联机事务处理(OLTP)系统(参见“事务处理”)操作的事务。客户通过结构化查询语言(SQL)调用,或其它类型的请求,产生对服务器的请求。这个事务处理监督器确信,正确地进行了修改,以保证数据的完整性。这在一个事务可以改变多个位置的数据库的分布式数据库环境是非常重要的。这个事务处理监督器使用双阶段提交,以保证所有的数据库都已经接收和认可了这些数据的正确性。否则,这个数据库返回它的事务前状态。 事务监督器从前都是与大的大型计算机系统联系在一起的,但是Tuxedo的设计是为了在不昂贵的基于UNIX的系统上运行。AT&T最初是作为它自己使用的联机事务处理开发Tuxedo的。虽然Tuxedo必须在U-NIX系统上运行,但是它可以与DOS、OS/2、Windows和UNIX客户一起工作。它还使用通用的通信协议,如传输控制协议/因特网协议(TCP/IP)和网络基本输入输出系统(NetBIOS),并且可以在这些环境提供分布式处理支持。例如,它可以根据请求的类型,服务请求从一个客户选择路由到一个特定的服务器。Tuxedo的基本特征是它的联机事务处理系统,但是,Tuxedo也工作于集成关系型的平面文件,以及层次数据库系统。
Tuxedo功能介绍
Tuxedo作为电子商务交易平台,它允许客户机和服务器参与一个涉及多个数据库协调更新的交易, 并能够确保数据的完整性。BEA Tuxedo一个特色功能是能够保证对电子商务应用系统的不间断访问。 它可以对系统组件进行持续的监视,查看是否有应用系统、交易、网络及硬件的故障。 一旦出现故障,BEA Tuxedo会从逻辑上把故障组件排除,然后进行必要的恢复性步骤。 BEA Tuxedo根据系统的负载指示,自动开启和关闭应用服务,可以均衡所有可用系统的负载, 以满足对应用系统的高强度使用需求。借助DDR(数据依赖路由), BEA Tuxedo可按照消息的上下文来选择消息路由。其交易队列功能, 可使分布式应用系统以异步“少连接”方式协同工作。 BEA Tuxedo LLE安全机制可确保用户数据的保密性, 应用/交易管理接口(ATMI)为50多种硬件平台和操作系统提供了一致的应用编程接口。 BEA Tuxedo基于网络的图形界面管理可以简化对电子商务的管理, 为建立和部署电子商务应用系统提供了端到端的电子商务交易平台。
Tuxedo的平台支持
BEA TUXEDO是一个非常开放的平台,支持五十多种硬件和操作系统平台,包括大多数的 UNIX服务器 ,WindowsNT 服务器,IBM的S/370,S/390, 加上AS/400和 Tandem公司的 NonStop系统。它的客户支持几乎所有的工作站,包括 UNIX,MS-DOS,Windows3.1/95, Windows NT, OS/2,Macintosh等。 BEA TUXEDO支持X/Open组织的分布式事务处理模型DTP,事务定界标准TX, 应用程序事务处理接口标准XA TMI以及 和资源 管理 器 (像数据库系统)的接口标准XA,并且还支持事务处理器之间的互操作标准OSI-TP。 BEA TUXEDO的客户端通过DLL 可以和Visual C++、Visual Basic、 Power Builder、 SQL Windows、Delphi、Develop/2000 以及其他4GL和CASE 工具互连。 无论从市场份额、技术体制、产品历史、成功案例来看,Tuxedo毋庸置疑是世界第一的交易类中间件产品:拥有企业级应用所必须的一切底层功能;极强的动态部署、自适应调整能力;完全的第三方独立产品,支持业界几乎所有的主机、数据库厂商。
1.先下载tuxedo软件tuxedo81_linux.bin 这个软件起初在centos5.5上安装。
http://www.oracle.com/technology/software/products/tuxedo/index.html
下载需要注册。
一. 以root身份建立tuxedo用户,并以tuxedo用户登陆,此用户将做为以后tuxedo管理员,用户默认目录为/home/tuxedo;
二. 创建/opt/tuxedo目录,用来安装tuxedo,记得要chown tuxedo.tuxedo tuxedo,把tuxedo目录的属主和组都改成tuxedo;
三. 用ssh把安装文件(tuxedo81_linux.bin)和用户许可证书文件(lic.txt)传到/opt/tuxedo目录中;
四. 执行sh tuxedo81_linux.bin
问题:
出错1--------------------------------------------------
[tuxedo@TUXSVR4 tuxedo]$ sh tuxedo81_linux.bin
Preparing to install...
The included VM could not be uncompressed. Please try to download
the installer again and make sure that you download using 'binary'
mode. Please do not attempt to install this currently downloaded copy.
解决办法:
脚本使用uncompress命令,但是linux下没有,使用cp /bin/gunzip /bin/uncompress
出错2--------------------------------------------------
Preparing to install...
/tmp/install.dir.17644/Linux/resource/jre/bin/i386/native_threads/java: error wh
ile loading shared libraries: libstdc++-libc6.1-1.so.2: cannot open shared objec
t file: No such file or directory
解决:
从别处拷来libstdc++-libc6.1-1.so.2 放到usr/lib里或者安装libstdc++-2.95.3-0.20000503.1.i386.rpm 软件包
rpm -ivh libstdc++-2.95.3-0.20000503.1.i386.rpm --force进去
出错3
Preparing to install...
Error occurred during initialization of VM
Unable to load native library: /tmp/install.dir.14985/Linux/resource/jre/jre/lib/i386/libjava.so: symbol __libc_wait,
version GLIBC_2.0 not defined in file libc.so.6 with link time reference
解决:
建立libcwait.c内容如下:
/* Compile with
gcc -shared -o libcwait.so libcwait.c -fpic -O
and use it by adding
LD_PRELOAD=/path/to/libcwait.so
in the environment of the application with the bug.
*/
#include <errno.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
pid_t
__libc_wait (int *status)
{
int res;
asm volatile ("pushl %%ebx\n\t"
"movl %2, %%ebx\n\t"
"movl %1, %%eax\n\t"
"int $0x80\n\t"
"popl %%ebx"
: "=a" (res)
: "i" (__NR_wait4), "0" (WAIT_ANY), "c" (status), "d" (0),
"S" (0));
return res;
}
把它编译成libcwait.so
gcc -shared -fpic -o libcwait.so libcwait.c
然后:
export LD_PRELOAD=/opt/tuxedo/libcwait.so
或者在
tuxedo用户下执行
gcc -shared -fpic -o libcwait.so libcwait.c
chmod a+x /opt/tuxedo/tuxedo81_linux.bin
LD_PRELOAD=/opt/tuxedo/libcwait.so /opt/tuxedo/tuxedo81_linux.bin
出错4:
Invocation of this Java Application has caused an InvocationTargetException. Thi
s application will now exit. (LAX)
Stack Trace:
java.lang.NoClassDefFoundError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvi
ronment.java:58)
at java.awt.Window.<init>(Window.java:188)
at java.awt.Frame.<init>(Frame.java:315)
at java.awt.Frame.<init>(Frame.java:262)
at com.zerog.ia.installer.Main.b([DashoPro-V1.2-120198])
at com.zerog.ia.installer.Main.main([DashoPro-V1.2-120198])
at java.lang.reflect.Method.invoke(Native Method)
at com.zerog.lax.LAX.launch([DashoPro-V1.2-120198])
at com.zerog.lax.LAX.main([DashoPro-V1.2-120198])
GUI-
解决:
以非图形界面安装 LD_PRELOAD=/opt/tuxedo/libcwait.so /opt/tuxedo/tuxedo81_linux.bin -i console无图形安装。
但是还是出错
[tuxedo@localhost tuxedo]$ LD_PRELOAD=/opt/tuxedo/libcwait.so /opt/tuxedo/tuxedo81_linux.bin -i console
Preparing to install...
Preparing CONSOLE Mode Installation...
===============================================================================
Choose Locale...
----------------
1- English
CHOOSE LOCALE BY NUMBER: 1
Invocation of this Java Application has caused an InvocationTargetException. This application will now exit. (LAX)
Stack Trace:
java.lang.NullPointerException
at com.zerog.ia.installer.Main.k([DashoPro-V1.2-120198])
at com.zerog.ia.installer.Main.d([DashoPro-V1.2-120198])
at com.zerog.ia.installer.Main.a([DashoPro-V1.2-120198])
at com.zerog.ia.installer.Main.main([DashoPro-V1.2-120198])
at java.lang.reflect.Method.invoke(Native Method)
at com.zerog.lax.LAX.launch([DashoPro-V1.2-120198])
at com.zerog.lax.LAX.main([DashoPro-V1.2-120198])
GUI-
老是出错java.lang.nullpointerexception查询了互联网说是
java.lang.NullPointerException
是一个比较常见的运行时异常,空指针,就是它所指向的对象是不存在的,于是调用这个不存在的对象的方法时,就出现这个异常
比较好的编程习惯,在不确定对象是否是空时,调用之前先与空(null)比较,不为null时再做调用。
具体分析,是在query里面的问题,可能是connection为空,看一下出错的地方,把用到的对象都 System.out.println()出来,哪个是null一目了然。但有些人说是要打补丁,但补丁是什么也没说,怎么打也没说。
但是本人并不懂得编程,所以刚开始以为是没装java软件的缘故,所以有又去下载j2sdk-1.4.2_08-5.pp-rh73.i386.rpm jre-6u6-linux-i586.rpm jre-6u11-linux-i586-rpm.bin.gz 什么版本都装过,但是还是出现以上的错误,java环境也配置了。
一、下载java.sun.com
jdk-6u2-linux-i586-rpm.bin文件
二、运行
sh jdk-6u2-linux-i586-rpm.bin
按多次回车后出现
Do you agree to the above license terms? [yes or no]
输入yes
三、编辑环境变量
$gedit ~/.bashrc
加入如下五行:
JAVA_HOME=/usr/java/jdk1.6.0_02
JAVA_BIN=/usr/java/jdk1.6.0_02/bin
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
四、创建链接
#cd /usr/bin
#ln -s -f /usr/local/jdk1.5.0_05/jre/bin/java
#ln -s -f /usr/local/jdk1.5.0_05/bin/javac
但是居然出现堆栽的错误ulimit -s的错误
[tuxedo@localhost ~]$ LD_PRELOAD=/home/tuxedo/libcwait.so /home/tuxedo/tuxedo81_linux.bin -i console
Preparing to install...
Fatal: Stack size too small. Use 'ulimit -s' to increase default stack size. 查询了互联网找到一些关于ulimit的知识。
ulimit命令
1,说明:
ulimit用于shell启动进程所占用的资源.
2,类别:
shell内建命令
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]
[john@localhost ~]$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
4,参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例:
5.举例
在Linux下写程序的时候,如果程序比较大,经常会遇到“段错误”(segmentation fault)这样的问题,这主要就是由于Linux系统初始的堆栈大小(stack size)太小的缘故,一般为10M。我一般把stack size设置成256M,这样就没有段错误了!命令为:
ulimit -s 262140
如果要系统自动记住这个配置,就编辑/etc/profile文件,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit -s 262140”,保存重启系统就可以了!
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的:
#grep ulimit /etc/profile
ulimit -S -c 0 > /dev/null 2>&1
这条语句设置了对软件资源和对core文件大小的设置
2]如果我们想要对由shell创建的文件大小作些限制,如:
#ll h
-rw-r--r-- 1 lee lee 150062 7月 22 02:39 h
#ulimit -f 100 #设置创建文件的最大块(一块=512字节)
#cat h>newh
File size limit exceeded
#ll newh
-rw-r--r-- 1 lee lee 51200 11月 8 11:47 newh
文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节
当然系统就会根据你的设置生成了51200字节的newh文件.
3]可以像实例1]一样,把你要设置的ulimit放在/etc/profile这个环境文件中.
用途
设置或报告用户资源极限。
语法
ulimit [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [ -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ]
描述
ulimit 命令设置或报告用户进程资源极限,如 /etc/security/limits 文件所定义。文件包含以下缺省值极限:
fsize = 2097151
core = 2097151
cpu = -1
data = 262144
rss = 65536
stack = 65536
nofiles = 2000
当新用户添加到系统中时,这些值被作为缺省值使用。当向系统中添加用户时,以上值通过 mkuser 命令设置,或通过 chuser 命令更改。
极限分为软性或硬性。通过 ulimit 命令,用户可将软极限更改到硬极限的最大设置值。要更改资源硬极限,必须拥有 root 用户权限。
很多系统不包括以上一种或数种极限。 特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字,或者为值 unlimited。要将特定的 ulimit 设置为 unlimited,可使用词 unlimited。
注:在 /etc/security/limits 文件中设置缺省极限就是设置了系统宽度极限, 而不仅仅是创建用户时用户所需的极限。
省略 Limit 参数时,将会打印出当前资源极限。除非用户指定 -H 标志,否则打印出软极限。当用户指定一个以上资源时,极限名称和单元在值之前打印。如果未给予选项,则假定带有了 -f 标志。
由于 ulimit 命令影响当前 shell 环境,所以它将作为 shell 常规内置命令提供。如果在独立的命令执行环境中调用该命令,则不影响调用者环境的文件大小极限。以下示例中正是这种情况:
nohup ulimit -f 10000
env ulimit 10000
一旦通过进程减少了硬极限,若无 root 特权则无法增加,即使返回到原值也不可能。
关于用户和系统资源极限的更多信息,请参见 AIX 5L Version 5.3 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimit、setrlimit 或 vlimit 子例程。
标志
-a 列出所有当前资源极限。
-c 以 512 字节块为单位,指定核心转储的大小。
-d 以 K 字节为单位指定数据区域的大小。
-f 使用 Limit 参数时设定文件大小极限(以块计),或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。
-H 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限。
-m 以 K 字节为单位指定物理存储器的大小。
-n 指定一个进程可以拥有的文件描述符的数量的极限。
-s 以 K 字节为单位指定堆栈的大小。
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者。
-t 指定每个进程所使用的秒数。
退出状态
返回以下退出值:
0 成功完成。
>0 拒绝对更高的极限的请求,或发生错误。
示例
要将文件大小极限设置为 51,200 字节,输入:
ulimit -f 100
但最后还是不行侧地都快崩溃了。
The installation did not complete successfully. It appears that your
Java VM might not have all the appropriate patches necessary to run
properly. Please refer to the following web page to obtain information
regarding the necessary patches.
http://www.ZeroG.com/patches/unix
It also appears that this installation was performed on a remote host
and the output is being displayed locally. If this launcher is being
displayed to a Microsoft Windows desktop through X Windows, the Java
Virtual Machine might have caused the installation to fail. Try running
this installer locally on the target system or through X Windows to
another UNIX host.
到最后实在没办法了,后来想了想是不是8.1版本的问题,后来就去http://www.oracle.com/technology/software/products/tuxedo/index.html
这个网站下载了tuxedo111120_32_Linux_01_x86.bin
然后sh tuxedo111120_32_Linux_01_x86.bin 居然可以安装了。哈哈!
Choose Install Set
------------------
Please choose the Install Set to be installed by this installer.
->1- Full Install
2- Server Install
3- Full Client Install
4- Jolt Client Install
5- ATMI Client Install
6- CORBA Client Install
7- Customize...
ENTER THE NUMBER FOR THE INSTALL SET, OR PRESS <ENTER> TO ACCEPT THE DEFAULT
: