Feb 27 2009

apache + fastcgi + php 安装要点

Category: 技术ssmax @ 14:32:46

这两天在新机器上面装了apache和php,原来用的是so module的模式运行php,因为php建议使用prefock mpm,这样子每个apache 的进程都会加载php module,造成占用内存过大,如果站点静态内容多的话,个人觉得太耗资源了,apache单线程一般是4-5m,加载了php之后是20M以上,汗啊。。。这样子1G内存也开不了多少进程。。。

最后决定用fastcgi方式执行php了,按需才生成,而且是用fastcgi的动态模式,方便进程管理。

具体步骤如下:

1、编译apache,一般我用的参数是:

./configure –prefix=/home/apache2 –enable-modules=most –enable-mods-shared=most –enable-ssl –enable-so

make

make install

2、编译php,如果要用fastcgi,就不能加–with-apxs2

‘./configure’ ‘–prefix=/home/php’ ‘–enable-fastcgi’ ‘–with-mysql’ ‘–with-openssl’ ‘–with-zlib’ ‘–with-gd’ ‘–with-curl’ ‘–with-bz2’ ‘–with-jpeg-dir’ ‘–with-png-dir’ ‘–with-freetype-dir’ ‘–enable-gd-native-ttf’ ‘–enable-force-cgi-redirect’

make

make install

cp php.ini-recommended /home/php/lib/php.ini

3、编译mod_fastcgi,最新的也是2007年的版本了。。。还好apache 2.2 一样能用。

cp Makefile.AP2 Makefile

vi Makefile 把涉及到apache的目录全部改成/home/apache2,就是上面的apache安装目录

make

make install

4、配置apache的httpd.conf

在Server全局配置:

LoadModule fastcgi_module     modules/mod_fastcgi.so
FastCgiIpcDir /tmp/fastcgi

FastCgiConfig -appConnTimeout 30 -maxClassProcesses 128 -maxProcesses 128 -restart
ScriptAlias /php-go-fcgi-bin/ /home/apache2/cgi-bin/
<Directory “/home/apache2/cgi-bin”>
    SetHandler fastcgi-script
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Action application/x-httpd-php /php-go-fcgi-bin/php

 

然后在需要支持php的vhost里面加上:

AddType application/x-httpd-php .php .phtml

 

这样就可以支持php了。

 

最后还要制定cgi脚本的位置,上面的配置制定了的是cgi-bin下面,可以ln -s来支持,但是这样如果直接访问这个php文件的话,会造成下载php-cgi执行文件的问题,所以就用了一个shell脚本来执行,这样子直接访问的话fastcgi就只会显示这个shell脚本。

vi /home/apache2/cgi-bin/php

#!/bin/sh

exec /home/php/bin/php-cgi

 

chmod a+x /home/apache2/cgi-bin/php

 

5、启动apache,/home/apache/bin/apachectl start 完事。

 

附上mod_astcgi动态的配置说明:

FastCgiConfig

Syntax: FastCgiConfig option [option ...]
Context: server config

The FastCgiConfig directive defines the default parameters for all dynamic FastCGI applications. This directive does not affect static or external applications in any way.

Dynamic applications are not started at server initialization, but upon demand. If the demand is heavy, additional application instances are started. As the demand fades, application instances are killed off. Many of the options govern this process.

Option can be one of (case insensitive):

-appConnTimeout n (0 seconds)
Unix:  The number of seconds to wait for a connection to the FastCGI application to complete or 0 to indicate a blocking connect() should be used. Blocking connect()s have an OS dependent internal timeout. If the timeout expires, a SERVER_ERROR results. For non-zero values, this is the amount of time used in a select() to write to the file descriptor returned by a non-blocking connect(). Non-blocking connect()s are troublesome on many platforms. See also -idle-timeout, it produces similar results but in a more portable manner.
Windows NT:  TCP based applications work as above. Named pipe based applications (static applications configured without the -port option and dynamic applications) use this value successfully to limit the amount of time to wait for a connection (i.e. it’s not “troublesome”). By default, this is 90 seconds (FCGI_NAMED_PIPE_CONNECT_TIMEOUT in mod_fastcgi.h).
-autoUpdate (none)
Causes mod_fastcgi to check the modification time of the application on disk before processing each request. If the application on disk has been changed, the process manager is notified and all running instances of the application are killed off. In general, it’s preferred that this type of functionality be built-in to the application (e.g. every 100th request it checks to see if there’s a newer version on disk and exits if so). There may be an outstanding problem (bug) when this option is used with -restart.
-flush (none)
Force a write to the client as data is received from the application. By default, mod_fastcgi buffers data in order to free the application as quickly as possible.
-gainValue n (0.5)
A floating point value between 0 and 1 used as an exponent in the computation of the exponentially decayed connection times load factor of the currently running dynamic FastCGI applications. Old values are scaled by (1 - gainValue), so making it smaller weights old values more than the current value (which is scaled by gainValue).
-idle-timeout n (30 seconds)
The number of seconds of FastCGI application inactivity allowed before the request is aborted and the event is logged (at the error LogLevel). The inactivity timer applies only as long as a connection is pending with the FastCGI application. If a request is queued to an application, but the application doesn’t respond (by writing and flushing) within this period, the request will be aborted. If communication is complete with the application but incomplete with the client (the response is buffered), the timeout does not apply.
-initial-env name[=[value]] (none)
A name-value pair to be passed in the initial environment when instances of applications are spawned. To pass a variable from the Apache environment, don’t provide the “=” (if the variable isn’t actually in the environment, it will be defined without a value). To define a variable without a value, provide the “=” without any value. The option can be used repeatedly.
-init-start-delay n (1 second)
The minimum number of seconds between the spawning of instances of applications. This delay decreases the demand placed on the system at server initialization.
-killInterval n (300 seconds)
Determines how often the dynamic application instance killing policy is implemented within the process manager. Smaller numbers result in a more aggressive policy, larger numbers a less aggressive policy.
-listen-queue-depth n (100)
The depth of listen() queue (also known as the backlog) shared by all instances of applications. A deeper listen queue allows the server to cope with transient load fluctuations without rejecting requests; it does not increase throughput. Adding additional application instances may increase throughput/performance, depending upon the application and the host.
-maxClassProcesses n (10)
The maximum number of dynamic FastCGI application instances allowed to run for any one FastCGI application. It must be <= to -maxProcesses (this is not programmatically enforced).
-maxProcesses n (50)
The maximum total number of dynamic FastCGI application instances allowed to run at any one time. It must be >= to -maxClassProcesses (this is not programmatically enforced).
-min-server-life n (30)
The minimum number of seconds a dynamic FastCGI application must run for before its restart interval is increased to 600 seconds. The server will get 3 tries to run for at least this number of seconds.
-minProcesses n (5)
The minimum total number of dynamic FastCGI application instances allowed to run at any one time without being killed off by the process manager (due to lack of demand).
-multiThreshold n (50)
An integer between 0 and 100 used to determine whether any one instance of a FastCGI application should be terminated. If the application has more than one instance currently running, this attribute will be used to decide whether one of them should be terminated. If only one instance remains, singleThreshold is used instead.
For historic reasons the mis-spelling multiThreshhold is also accepted.
-pass-header header (none)
The name of an HTTP Request Header to be passed in the request environment. This option makes available the contents of headers which are normally not available (e.g. Authorization) to a CGI environment.
-priority n (0)
The process priority to be assigned to the application instances (using setpriority()).
-processSlack n (5)
If the sum of the number of all currently running dynamic FastCGI applications and processSlack exceeds maxProcesses, the process manager invokes the killing policy. This is to improve performance at higher loads by killing some of the most inactive application instances before reaching maxProcesses.
-restart (none)
Causes the process manager to restart dynamic applications upon failure (similar to static applications).
-restart-delay n (5 seconds)
The minimum number of seconds between the respawning of failed instances of applications. This delay prevents a broken application from soaking up too much of the system.
-singleThreshold n (0)
An integer between 0 and 100 used to determine whether the last instance of a FastCGI application can be terminated. If the process manager computed load factor for the application is lower than the specified threshold, the last instance is terminated. In order to make your executables run in the “idle” mode for the long time, you would specify a value closer to 1, however if memory or CPU time is of primary concern, a value closer to 100 would be more applicable. A value of 0 will prevent the last instance of an application from being terminated; this is the default value, changing it is not recommended (especially if -appConnTimeout is set).
For historic reasons the mis-spelling singleThreshhold is also accepted.
-startDelay n (3 seconds)
The number of seconds the web server waits patiently while trying to connect to a dynamic FastCGI application. If the interval expires, the process manager is notified with hope it will start another instance of the application. The startDelay must be less than appConnTimeout to be effective.
-updateInterval n (300 seconds)
The updateInterval determines how often statistical analysis is performed to determine the fate of dynamic FastCGI applications.


Feb 27 2009

svn 安装要点

Category: 技术ssmax @ 14:14:31

1、需要使用 berkeley db的话,需要安装db4和db4-devel,一般yum或者apt都能找到,然后configure的时候一定要指定 –with-berkeley-db ,否则很多时候都不会编译进去。

2、和apache的结合问题,通常编译之后不成功,就是和apache的结合有问题,经常表现为apr和apr-util版本不对,所以最好保留apache编译时候的源码包(很多时候就算去下载一样版本的apr都是有问题的,因为apache自己就改过),找到srclib下面的apr和apr-util,拷贝到subversion源码根目录,然后进入apr和apr-util目录,各make clean一次(因为你的apache装的时候make过一次了),然后configure的时候只要制定–with-apxs=pathToApacheApxs,不要制定apr和apr-util,它就会自己找源代码装的了。

3、客户端用neon和ssl的问题,下载最新的neon源码包,然后放在subversion源码根目录下面,configure的时候加上–with-neon=./neon –with-ssl 就可以了。


Feb 26 2009

宁波双线

Category: 乱up当秘笈ssmax @ 21:25:43

今天搞了一台租用,宁波双线,100m共享,看上去还是挺稳定的,先试用一个月,稳定的话再转年付,只要4500就好了,爽一下,呵呵


Feb 25 2009

Real Time JVM 实时JAVA虚拟机

Category: 技术ssmax @ 12:31:50

记得一年前去sun的研讨会,说到java实时虚拟机,貌似很强大的,今天无意中找到几款,下载来研究研究,嘿嘿

第一个就是BEA的JRockit real time,因为普通的JRockit jvm已经整合到WebLogic 里面的,如果不想下载700多M的WebLogic ,real time就是另外一个选择了,填了一大张表才能下载到

http://www.oracle.com/technology/software/products/jrockit/index.html

jrrt-3.0.0-1.6.0-linux-ia32.bin

和标准的jvm一样,chmod a+x jrrt-3.0.0-1.6.0-linux-ia32.bin; ./jrrt-3.0.0-1.6.0-linux-ia32.bin

然后就可以安装了,用来跑resin,jira也没有什么问题,有空找些大项目来试验试验,嘿嘿

 

第二个就是IBM的jvm real time,是隐藏在WebSphere Real Time V2.0 32-bit xSeries (Intel compatible)

里面的,文件是

ibm-wrt-i386-sdk-2.0-0.0.i386.rpm

也是一堆表格要填写才给你下载。。。

http://www.ibm.com/developerworks/java/jdk/linux/download.html

 

第三个就是sun自己的jrts了,90天的试用期,研究用可以无限

http://java.sun.com/javase/technologies/realtime/rts/

 

实时虚拟机增加了很多功能,好像内存控制方面的,垃圾回收方面的,不过这些都要求你写新的代码,所以通用的话估计还是没什么大效果。


Feb 17 2009

现代西游

Category: 乱up当秘笈ssmax @ 22:05:23

唐僧师徒一行经历九九八十一难终于见到了如来佛求取真经

如来问:“你们带U盘了么?”
唐僧师徒。。。。

如来又问:“移动硬盘呢?”
唐僧师徒。。。。

如来继续问:“IPOD也可以哇”
悟空挖起耳朵来

如来叹了口气:“那只有网上发给你们了,你们就原路回去吧

唐僧:靠,早知道加你QQ就完了,老子还走这么远干嘛!
唐僧:悟空,你也真是的,你把蜘蛛精都打死了,你看,上不网了吧!

如来:那你们路上是怎么娱乐的?
唐僧师徒:打怪升级


Feb 13 2009

几款java反编译软件

Category: 技术ssmax @ 21:37:56

这几年用了好几款java反编译工具,现在罗列如下:

1、最早用的是DJ JAVA DECOMPILER,现在最新版本是3.10.10.93,很强大的,破解一般就靠它了,可惜没有eclipse的插件

http://members.fortunecity.com/neshkov/dj.html

 

2、Jad,一款很快速的反编译工具,但是有很多类都反编译不出来,而且也没有什么维护了,2006年的,不过就有JadClipse,也是我用的第一款eclipse里面的反编译工具。

http://www.kpdus.com/jad.html

http://sourceforge.net/projects/jadclipse

 

3、JodeEclipse 也是一款基于eclipse的反编译工具,不用另外装什么exe,也挺好用,不过也是没有更新很久了。

http://sourceforge.net/projects/jodeeclipse

 

4、JD,有windows版本的,基于C++,有eclipse版本的JD-Eclipse,今天刚开始用,看起来还不错,嘿嘿。

http://java.decompiler.free.fr/

 

5、还有一款没有用过,但是听说过的,是DAVA,是Soot的一部分,没用过,也不清楚。

http://www.sable.mcgill.ca/dava/

 

因为java太容易反编译了,所以工具也特别多,下面的网站有一个很全的列表。。。不过估计大多数都是不更新的了

http://www.java-decompiler.com/


Feb 12 2009

不差钱

Category: 乱up当秘笈ssmax @ 18:34:57

很久没写了,最近开始疯狂工作中,郁闷,嘿嘿,今天看到一个冷笑话,贴一下吧。。。

蒙牛:请问我们的产品检测出三聚氰胺了吗?
质检人员:恭喜你,没有!
蒙牛:那请问检测出致癌物质了吗?
质检人员:恭喜你,含量没那么高?
蒙牛:有..有多高?
质检人员:不足以致癌,只是有害!
蒙牛:有害的物质有..有吗?
质检人员:有还是没有?
蒙牛:你们检验的,有没有你还不知道啊,这又不差钱!
质检人员:哦~~那没有.
蒙牛:益菌因子有吗?
质检人员:没有!
蒙牛:这个可以有!
质检人员:这个真没有!

网易评论里面的人真tmd有才得很


Feb 06 2009

真假raid列表

Category: 技术ssmax @ 09:56:40

所谓的假raid,就是fake raid,没有集成io控制芯片的,还是要通过cpu和系统驱动来运算的。真的硬件raid其实也不贵,列表区别一下,以后可以买来玩玩。

 

  • (link) 3Ware Escalade 9xxx (e.g., 9500S-4 4-port, 9500S-8 8-port, 9500S-8MI 8-port, 9500S-12 12-port, 9500S-12MI 12-port) and 8xxx family (e.g., 8506, 8006, 8006-2LP 2-port, 8506-4LP 4-port, 8506-8 8-port, 8506-12 12-port) SATA-I PCI cards and 95xx series family (e.g., 9550SX-4LP 4 port, 9550SX-8LP 8 port, 9550SX-12 12-port, 9550SX-12MI 12-port, 955SX-16ML 16-port) SATA-II NCQ PCI-X cards — real hardware RAID. Supported by its own (3w-xxxx and 3w-9xxx) driver in 2.4.18 or earlier: essentially any recent 2.4 kernel. Uses exact same driver as prior (non-SATA) 7xxx series. Faster at sequential reads than the Adaptec cards, if you tune the readahead buffers. Note: 3Ware provides utilities to support ATA hotswap with its host adapters (only), if using suitable drive enclosures/connectors. Model 9500S-8 (8-port card) accepts an optional battery backup unit. Applied Micro Circuits Corporation (AMCC) acquired 3Ware, Inc. in March 2004.
  • (link) Adaptec AAR 2400, 2410, 2410SA, 2120S, 2200S, 2810SA (8-port), 21610SA (16-port) series PCI cards — real hardware RAID, using the slightly anemic Intel IOP302/303 I/O co-processor chips. Use “aacraid” driver. (Should not be confused with the Adaptec 2400A ATA RAID host adapter, for which one uses the dpt_i2o driver, that card being a legacy of Adaptec’s buying DPT — nor with the low-end Adaptec AAR 12×0 series, which please see.) Faster at random I/O than the 3Ware cards. Optional battery is available for the card’s cache, for more reliable operation in the event of power loss, etc. (Card disables the drive’s write cache.)
  • (link) Adaptec AAR 2420SA (4-port) and AAR 2820SA (8-port) PCI-X cards — real hardware RAID. Use “aacraid” driver. Features Adaptec AIC-8210 RAID co-processor chip. Supports NCQ, hot sparing. Optional battery backup unit is available.
  • (link) Adaptec AAR 1200, 1210, 1210SA, 1205SA, 2047600 (2-port) series PCI cards — fakeraid. This turns out to be a Silicon Image 3112-variant or 3112A-variant. Works with a patched version of libata’s sata_sil subdriver (2003-12).
  • (link) Adaptec ASR-2020SA/2025SA Zero-Channel RAID cards — real hardware RAID. Cards lack SATA I/O functionality but supply RAID logic: offload I/O processing across ZCR connection to EMRL- or RAIDIOS-compatible SATA-I I/O chip on motherboard. Use “aacraid” driver.
  • (link) Adaptec AAR-1420SA 4-port SATA-II PCI-X — fakeraid. These are rumoured to be a cheap OEM from someone else, but the chipset identity is unknown. Note Brent Norris’s scathing review. Beware of Adaptec’s term “HostRaid”: This means fakeraid, not real hardware RAID. Adaptec offers proprietary drivers (binary-only).
  • (link) Addonics SATA-I family — fakeraid. See Silicon Image 3112. Models ADST203 (2-port SATA-I PCI combo card), ADST108 (external/internal 2-port SATA-I PCI card), and ADSA2 (2-port SATA-I PCI card) all use SiI3112 chips. Models ADSA4R-E (4-Port eSATA-I PCI card) and ADST114 (4-port SATA-I RAID PCI card) both use SiI3114 chips. Model AD2SAP-E (2-Port eSATA-I PCI card) uses SiI3512 chips.
  • (link) Addonics SATA-II family — fakeraid. See Silicon Image 3124. Models ADS3GX4R5-E (eSATA-II RAID5/JBOD card), ADS3GX4R5 (SATA-II PCI-X RAID card), and ADSA3GX4R-E (4-Port External SATA-II PCI-X card) all use SiI3124 chips. Model ADSA3GPX1-E (eSATA-II PCI-Express card) uses SiI3132 chips.
  • (link) Addonics CardBus PCMCIA cards — fakeraid. Model ADCB2SA-E is a 2-port eSATA-I CardBus card. Model ADCBSA2 is a 2-port SATA-I CardBus card. I so far have no information on their chipsets: This entry is a placeholder.
  • (link) ADMA — fakeraid. Please see entry for Pacific Digital Talon, as no other manufacturers yet implement this open-standard hardware spec.
  • (link) AHCI mode — fakeraid. Intel’s Advanced Host Controller Interface is an open-standard PCI abstract device layer for mass-storage access describing a fairly advanced SATA interface (“HBA” = host bus adapter), in theory supporting native command queuing (NCQ) with per-device queues, hotplug, port multiplexer, etc. It’s currently represented by Intel’s ICH6-R and ICH6-M chipsets, ULi’s (formerly ALi) M1575 and M1567 4-port SATA-II PCI Express South Bridges; AMD’s SB600 South Bridge, and some chipsets from SiS, VIA, Nvidia, ATI, and JMicron. libata AHCI driver “ahci” became available starting 2.4.29-preX and 2.6.9-rcX, and is now production quality. If your desired installation kernel lacks “ahci”, you may be able to use a pre-AHCI fallback mode (e.g., the ICH5-like fallback mode of Intel ICH6/ICH6-R chipsets): Look in your BIOS Setup program for a “legacy” or “ATA” setting, e.g., as reported by Peter Knaggs for his Dell Dimension XPS Gen 3 Series / Intel 925X Express chipset motherboard.
  • (link) AMD SB600 South Bridge — fakeraid. Supports the standard AHCI driver interface.
  • (link) Areca Technology Corp. ARC-11xx, ARC-12xx PCI-X and PCI-Express cards — real hardware RAID. Model ARC-1120 has a battery backup unit option. Said to use Marvell 88SX60xx chips and an Intel 80332 XOR engine. Erich Chen of Areca maintains GPLed source code for a “arcmsr” driver for these chipsets (also available at unnet). Like Garzik’s libata driver, Chen’s “arcmsr” driver uses the kernel’s SCSI layers.
  •  (link) ATI 4379 — fakeraid. This turns out to be an integrated version of the Silicon Image 3112. 
  • (link) Broadcom RAIDCore BC4852, BC4810 (8-port), and BC4452, BC4410 (4-port) PCI-X cards — fakeraid. Units use Broadcom BCM5770 chips. The cheaper 4810 and 4410 cards differ from their 4852 and 4452 brethren in having some advanced capabilities disabled; they can be upgraded via an extra-cost software key. (Broadcom Corporation acquired RAIDCore in spring 2004.)Broadcom offers proprietary driver “bcraid” for its BCM5770-chip-based RAIDCore BC4000-series products (BC4452, BC4652, BC4852, BC4450, BC4650, BC4850, BC4410, BC4610, BC4810).
  • (link) Broadcom SATA-II cards — fakeraid. As of 2005-09, new cards are expected based on Broadcom’s BCM5773 chip supporting 8-port PCI-X or PCI-Express SATA-II with Broadcom’s XelCore fakeraid. This entry is a placeholder.
  • (link) Broadcom RAIDCore BCM5785 aka HT-1000 chips — fakeraid. Proprietary drivers using Broadcom’s proprietary “blob” are available from IBM and Tyan.
  • (link) HP (/Compaq) SA5xxx PCI cards — real hardware RAID. Supported in 2.6.6 and later kernels using the Compaq CISS (cciss) driver.
  • (link) HighPoint RocketRAID 1540/1542/1544/1640 & 454 (HPT374 chipset), RocketRAID 1520 (HPT372, HPT372N, or HPT372A chipset), and Rocket 1520 (HPT302N chipset — non-RAID) PCI cards — fakeraid. Supported by drivers/ide’s hpt36x driver, by at latest 2.4.21-pre5. No libata driver exists for these, but Alan Cox is working on one (as of 2006-01). Note: Some recent HighPoint cards use Marvell 88SX50xx chips (for which see separate driver info). Problematic proprietary Linux i386 binary drivers for HighPoint fakeraid (release 2.0 of which is reported to malfunction or even fail to compile on later 2.6 kernels ranging, at least, from 2.6.8 through 2.6.14) are available, but, as usual, you’re better off using Linux’s own open-source “md” software-RAID driver. (Warning: You’ll need to load the proprietary driver only into kernels lacking the conflicting drivers/ide htp36x driver, in the presence of which your system will seize up, at boot time.)
  • (link) HighPoint Rocket 1511 (1-port external port, PCI) and RocketHead 100 (external PATA/SATA converter widget) — fakeraid. These devices both are based on HighPoint PATA controller chips (HPT302N and HPT372A, respectively), speaking to SATA via a Marvell 88i8030 SATA bridge chip. As such, they cannot be supported by Linux’s drivers/ide htp36x driver, but there are proprietary, binary-only drivers.
  • (link) HighPoint RocketRAID 1820 (8-port) / 1820A (8-port) / 1810 (4-port) SATA-II PCI-X cards — fakeraid. Said to use the Marvell 88SX5080 chip. Model 1820A adds the HighPoint HPT601 XOR engine chip: Its model 1820 predecessor was out only briefly, and should be rare.HighPoint makes available proprietary driver “hptmv” (source code wrapper around a binary-only proprietary core library).
  • (link) HighPoint RocketRAID 2240 (16-port SATA-II PCI-X), 2220 (8-port SATA-II PCI-X), 2320 (8-port SATA-II PCI Express), 2224 (4-port SATA-II PCI-X) cards — fakeraid. Proprietary binary drivers (2240, 2220, 2320, 2224) can be downloaded from the manufacturer. Correspondent Berkley Shands notes that these cards and proprietary drivers are quite CPU-intensive, even pushing a quad-Opteron system a bit. He also recommended tweaking hpt_reset routine to fix IRQ spinlocks, on 2.6.14/2.6.15 kernels. He achieved a maximum initial read speed of 870MB/sec. on RAID0, using 50% of CPU power. Note that models 2220 and 2240 both try to use (different) proprietary drivers named “hptmv6”. Use command-line rather than GUI RAID setup utility, if there will be more than 8 drives per array. Shands adds: “Just FYI, to get those nice performance numbers, you must set the read-ahead value for the drive and use the POSIX_WILL_NEED function of fadvise(). The default read-ahead is 8 sectors. I use 1024; otherwise, you won’t come anywhere near those numbers.”
  • (link) HighPoint RocketRAID 2310 (4-port SATA-II PCI Express card) — fakeraid. An proprietary “rr2310_00” driver (source code wrapper around binary-only proprietary core libraries, deceptively claimed to be “open source”) is available from the manufacturer.
  • (link) HighPoint RocketRAID 2320 (8-port SATA-II PCI Express card) — fakeraid. An proprietary, high-performance “rr232x” driver (source code wrapper around binary-only proprietary core libraries, deceptively claimed to be “open source”) is available from the manufacturer.Garzik mentions that newer HighPoint cards (those that aren’t based on Marvell 88SX50xx chips) pretend they are SCSI and are supported by the “hptiop” driver.
  • (link) IBM ServeRAID family, e.g. ServeRAID-7t, and 7k PCI and PCI-X cards — real hardware RAID. Prior to the ServeRAID-7 series, units probably worked with the same ips driver as for the SCSI predecessor cards in this family. More info. Somewhere around the ServeRAID 7t, IBM began applying the “ServeRAID” brand to Adaptec-oriented host adapters and Intel ICH-oriented fakeraid (so-called “HostRaid”) ones: E.g., the ServeRAID-7t and 7k are based on an Adaptec 2410SA chip; the ServeRAID-7e uses an Intel ICH5-R fakeraid chip (entries for which, please see). Oddly, support for IBM/Adaptec HostRAID fakeraid format (ServeRAID model 7e) is said to require Adaptec’s proprietary a320raid driver.
  • (link) ICP Vortex GDT8586RZ (4-port), GDT8546RZ (8-port) series PCI cards — real hardware RAID: Uses Intel 80303 I/O processor and hardware XOR engine dedicated coprocessor, and includes 128MB cache. Works with the kernel’s gdth driver version 3.04 or later. A file of hints on using the gdth driver with sundry distributions is available from ICP Vortex. (Adaptec acquired ICP Vortex — from Intel — in 2003.) One source says these cards are based on Silicon Image 3112 chips, which are probably not the system-facing chipsets, and so don’t determine driver support.
  • (link) Intel ICH5 / ICH5-R family chips — fakeraid. (See fakeraid support details under Intel ICH6.) Supported in 2.4.22 and later kernels using drivers/ide’s piix driver (but that driver locks up in many cases), and also (much more reliably) in libata’s ata_piix driver, production quality since 2004-02-25. Intel ICH5/ICH6 is an open-standard hardware spec. ICH7/8 usually can be set to be backwards-compatible. “Enhanced mode” or “SATA-only mode” may need to be set in BIOS.Intel produced GPLed patch sets for ICH5 in the 2.4.9 and 2.4.20 kernels of (respectively) Red Hat Advanced Server 2.1 and Red Hat Linux 8.0, available for download as part of its driver set for the 6300ESB I/O Controller Hub South Bridge on its E7520 and 875P motherboard chipsets.

    Adaptec has released a proprietary “aarich” driver (source code wrapper surrounding a binary-only core library) for Intel ICH5-R and Silicon Image 3512. (The name is intended to be parsed as AAR-ICH, as it is intended for certain Adaptec AAR-series cards based on Intel ICH5 SATA-I chips.)

    Supermicro’s ftp site offers proprietary drivers for Intel ICH5-R chips on Intel Hance Rapids motherboards, written by Adaptec.

  • (link) Intel ICH6 / ICH6-R / ICH6-M family SATA-I chips — fakeraid. libata’s ata_piix driver support is now (2004-02-25) functional when the ICH6 is running in either ICH5-alike mode or (on ICH6-R or ICH6-M) the enhanced, much-faster, open-specification “AHCI” mode (entry for which, please see), as of 2004-07-08.i ICH6 and AHCI are both open-standard hardware specs. If your desired installation kernel lacks the “ahci” driver, you may be able to use ICH5-like fallback mode: Look in your BIOS Setup program for a “legacy” or “ATA” setting, e.g., as reported by Peter Knaggs for his Dell Dimension XPS Gen 3 Series / Intel 925X Express chipset motherboard.Note that as of 06/2004, Silicon Image chipsets have a bug in “lba48” addressing (of a few drives over 137GB, but not all of them), necessitating a patch that will, as a necessary consequence, limit performance on the drives affected (only).

    Alternatively, LSI has produced proprietary, binary-only drivers (source code wrapper accompanying a “megaide” binary-only driver) for ICH6-R. Supermicro’s ftp site offers versions of those same proprietary, binary-only drivers.

    Intel ICH5-R, ICH6-R, and perhaps some others perform RAID0 disk-spanning via a BIOS trick, which is thus OS-independent. That mode of Intel fakeraid (Intel Software RAID) can be supported in 2.4.x on ICH5/6 with ataraid subdriver iswraid atop libata’s ata_piix (not atop drivers/ide): http://www.kerneltraffic.org/kernel-traffic/kt20031201_243.html#16, http://www.kerneltraffic.org/kernel-traffic/kt20040331_255.html#16. (The iswraid patch will be merged into kernel 2.4.28; it and related patches/info are available at http://iswraid.sourceforge.net/.)

  • (link) Intel ICH7 / ICH7-R SATA-II chips — fakeraid. Should work with either libata’s ata_piix driver or libata’s ahci driver. (Please see entries for ICH5, ICH6, and AHCI.)Supermicro’s ftp site offers proprietary drivers for Intel ICH7-R, written by Adaptec.
  • (link) Intel SRCS14L Serial ATA RAID Controller PCI card — real hardware RAID. This is a four-port PCI card for servers, based on an ICP Vortex chipset, driving SATA-I output using a pair of Silicon Image SiI3112A SATA-I chips, and with an Intel GC80303 dedicated I/O processor with 64MB of ECC SDRAM for processing XOR logic. Use the kernel’s “gdth” driver (for ICP Vortex and for related Intel SCSI RAID cards). The Silicon Image chips are not the system-facing chipsets (1 2), and so don’t determine driver support.
  • (link) Intel SRCS16 and SRCS28X Serial ATA RAID Controller PCI cards — real hardware RAID. These are six-port PCI and eight-port PCI-X cards (respectively) for servers, based on an LSI Logic MegaRAID chipset, driving SATA-I output using Silicon Image SiI3112A SATA-I chips (one for each channel pair) and an Intel GC80302 or IOP331 (respectively) dedicated I/O processor with 64MB or 128 MB of ECC SDRAM (respectively) for processing XOR logic. Use the kernel’s “megaraid2” driver (For LSI Logic MegaRAID). The Silicon Image chips are not the system-facing chipsets (1 2), and so don’t determine driver support. An optional battery-backup daughterboard is available.
  • (link) Intel 31244 4-port SATA-II PCI-X sub-board — this is based around a Vitesse VSC71714 chip (which please see). No RAID functionality, in itself: Sub-board can be embedded on a NAS controller card with a separate RAID chip.
  • (link) ITE Tech., Inc. IT8212 / IT8212F PCI Express card — real hardware RAID. GPLed “iteraid” driver by Mark Lu of ITE Tech., Inc. is available — which unfortunately is broken in 2.6.10 and later kernels, because it relies on the long-deprecated MOD_DEC_USE_COUNT and MOD_INC_USE_COUNT module-use-count macros removed from include/linux/module.h as of that kernel version. (2005-09-12 addendum: Donald Huang of ITE Tech. answered my query, and said that Jack Lee of ITE Tech. will undertake the necessary revision work, some time later.)Alternatively, Alan Cox’s series of -ac variant kernel source code trees include an “it8212” driver as Alan’s add-in to 2.6.9 and later kernels’ drivers/ide driver collections. (As of 2005-09-08, this patch isn’t in mainline kernels, however. Update: As of 2006-01, the new driver is said to be in mainline 2.6.14 kernels, at least.)
  • (link) LSI Logic MegaRAID SATA 150-4 (four ports) and 150-6 (six ports) Serial ATA RAID Host Adapters — real hardware RAID. Work with 2.4.x kernel’s megaraid2 driver (same one as for SCSI). Cards use an Intel GC80302 dedicated I/O processor. This chipset, under its former AMI brand name, has had a long and excellent history with SCSI gear. Optional battery backup unit is available for the model 150-6 card’s cache, for more reliable operation in the event of power loss, etc. These cards should not be confused with the low-end LSI Logic MegaRaid SATA 150-2 card (which please see).
  • (link) LSI Logic MegaRAID SATA 150-2 Serial ATA RAID Host Adapter PCI card — fakeraid. This turns to to be a Silicon Image 3112-variant. Reports suggest that Linux’s open-source SiI 3112 driver sets from Linux work with this card.An i386 binary (ataraid?) subdriver (megaide) for this fakeraid (“IDEal RAID”) scheme can be retrieved from Steve Hardy’s Web site, from http://pub.datux.nl/linux/drivers/proliant/, or from LSI Logic. The driver is a GPLed wrapper around proprietary library megaide_lib.o. I’d recommend using (instead) Linux’s own open-source “md” software-RAID driver, unless/until LSI Logic (like HighPoint, Nvidia, Promise, and VIA) gets a clue about open source.
  • (link) LSI Logic MegaRAID SATA 300-4X 4-port and 300-8X 8-port SATA-II PCI-X cards — real hardware RAID. Uses a Marvell 88SX6081 chip. Compatible with Linux’s megaraid2 driver.
  • (link) LyCOM Technology, Inc. cards — fakeraid. These PCI (ST-108, ST-114, ST-102, ST-117, ST-119, ST-117R, ST-115, ST-100, ST-103, ST-200, ST-208, ST-210, ST-203, ST-209, ST-211, NW-201, ST-125, ST-124, ST-113e, ST-119e, ST-134e, ST-117e), PCI Express (PE-105N, PE-102R5, PE-103R5, PE100, PE100N, PE102, PE-103), and PCI-X (64-101, 64-102, 64-102-1) cards appear to use various Silicon Image chips.
  • (link) LyCOM Technology, Inc. CardBus cards — fakeraid. It’s unclear what chipset these PCMCIA cards use: This entry is a placeholder.
  • (link) Marvell Technology Group Ltd. 88SX7xxx, 88SX6xxx (“Hercules II”) and 88SX5xxx/88SX48 (“Hercules I”) chip series chips — fakeraid. The 88SX50xx series supports TCQ, but not NCQ or port multipliers. The 88SX60x1 series supports TCQ, NCQ, and port multipliers. libata driver “sata_mv” became available 2005-06 (beta quality as of 2007-02).For Marvell chipsets 88SX5040, 88SX5041, 88SX5080, and 88SX5081 “Hercules I” (all SATA-I); and 88SX6041 4-port & 88SX6081 8-port “Hercules II” (both SATA-II), there is a “mvSata” driver from Marvell International Ltd. Like Garzik’s libata “sata_mv” driver, Marvell’s “mvSata” driver uses the kernel’s SCSI layers.

    As of May 2005’s v. 3.4.1, that driver changed from proprietary licensing to GPLv2; probably the best revised source code is now Carlos Vidal’s file tree, which also has precompiled kernels for Fedora Core and a HOWTO that should generalise well to other distributions. A patch may be necessary to run this driver properly on newer 2.6 kernels.

    Supermicro’s ftp site offers proprietary drivers for Marvell 4-port and 8-part SATA chips, written by Adaptec.

  • (link) Maxtor SATA/150 PCI Card — fakeraid. A relabelled Promise FastTrak TX2plus card (which please see), using a PDC20375 chip.
  • (link) NetCell SyncRAID SR3000, SR3100 (3-port) and SR5000, SR5103 (5-port) SATA-I RAID PCI cards — real hardware RAID. All units cited are based on the NetCell SyncRAID TD6405 64-bit controller ASIC. NetCell provides a GPLed driver in the form of a patch to the Linux kernel source tree’s drivers/ide code.
  • (link) Nvidia NForce3 Go120, Go150, 150, 250, 250Gb, and 150 Pro (SATA-I); NForce 4 MCP, SLI, Ultra (SATA-II); and NForce Pro 2200 MCP and 2050 (SATA-II) chips — fakeraid. This motherboard chipset family uses yet another type of fakeraid called nvRAID. libata driver “sata_nv” added as of 2004-07-08 development code, included in kernel 2.6.8, and now production quality. As of 2006-01-25, Nvidia provided provided information (under NDA) that will permit implementation of NCQ support. Note: Nvidia’s proprietary Linux i386 binary driver bundles for its chipsets seem to rely on (and in some cases furnish) Garzik’s “sata_nv” driver — presumably adding to that Nvidia’s own subdriver to support nvRAID disk formatting. However, as usual, you’re probably better off using Linux’s own open-source “md” software-RAID driver for the RAID functionality.Note that newer Nvidia chipsets have switched to the AHCI open standard.
  • (link) Pacific Digital Talon ZL-2, ZL-4, and RAIDStaQ LP-4 series SATA-I PCI cards (and potentially cards from licensees using PD’s “automatic DMA” = ADMA interface) — fakeraid. No hotplug or port multipliers. libata driver “ata_adma” existed in the development branch a/o 2005-11, but in 2007 appears to have been replaced by the libata “pdc_adma” driver (beta quality as of 2007-02).
  • (link) Pacific Digital QMaster RAID SATA-II PCI-X cards — genuine hardware RAID (but Linux driver uses it only in non-RAID mode). libata driver “sata_qstor” (initially named “ata_qstor”) was added in 2005-03, and is beta quality as of 2007-02.
  • (link) Promise FastTrak SATA150, SATA150 TX2, SATA150 TX2plus, SATA150 TX4, SATA150 SX4, SX4-M, SATA378, and Ultra 618 series PCI cards (e.g., PDC20621, PDC20275, PDC20618, PDC20318, PDC20319, PDC20375, PDC20378, and PDC20376 chips) PCI cards — fakeraid, mitigated by the fact that the Promise PDC20621 ASIC chip (on SX4, SX4-M, and TX4, but not TX2) functions as a “RAID accelerator” — XOR engine and memory, leaving RAID logic to the host CPU — but libata doesn’t support that functionality at this time (2005-11). libata’s “sata_promise” driver (for tx2/tx4, production quality driver) or “sata_sx4” (for sx4, beta quality driver) provides support a/o 2004-02-25 (included in kernel 2.6.x). Cache memory add-on hardware module is available for some models (OEM versions only, though, not retail). Proprietary fakeraid “ft” driver (ataraid?) is available, as are instructions. An now-unmaintained 2003-02 i386 binary driver (often claimed in error to be open source; people being fooled by its source-code wrapper) is also available.
  • (link) Promise SX8 PCI-X card — fakeraid. Per the 2004-09-15 libata report, a separate block driver, “sx8” (not part of libata), has been written for this hardware. (However, Garzik later wrote that it may be rolled into libata, after all, to make possible ATAPI support.)
  • (link) Promise PDC20579-chip-based SATAII150 579 SATA-II chipset — fakeraid. libata’s sata_promise driver can support it using a patch to the 2004-10 libata development code and a 2.6 kernel, or by using the manufacturer’s GPLed driver code.
  • (link) Promise PDC20518-chip-based SATAII150 TX4 SATA-II card — fakeraid. libata’s sata_promise driver can support it using a patch to the kernel 2.6.10 libata code. Garzik posted his own patch on 2005-02-06 to support this device; the code will be included in kernel 2.6.11. Alternatively, use the manufacturer’s GPLed driver code.Kristoffer Winther Sørensen has posted a guide to retrofitting Garzik’s sata_promise patch to the current SUSE Linux installer.
  • (link) Promise PDC20575-chip-based SATAII150 TX2plus SATA-II chip — fakeraid. Garzik posted a patch on 2005-02-06 to support this device; the code will be included in kernel 2.6.11. Alternatively, use the manufacturer’s GPLed driver code.
  • (link) Promise PDC20619 chip — fakeraid. Tobias Lorenz’s patch for libata’s sata_promise driver was incorporated into libata-dev on 2005-03-13 and merged into kernel 2.6.11-rc4.
  • (link) Promise PDC40718-chip-based SATA300 TX4 SATA-II chipset — fakeraid. Supported by libata’s sata_promise driver as of 2005-04-15. Alternatively, use the manufacturer’s GPLed driver code.
  • (link) Promise PDC20775-chip-based SATA300 TX2plus SATA-II chipset — fakeraid. Supported by libata’s sata_promise driver as of 2005-04-15. Alternatively, use the manufacturer’s GPLed driver code.
  • (link) Promise PDC20779-chip-based SATA300 779 SATA-II chipset — fakeraid. This chipset will probably prove compatible with libata’s sata_promise driver, perhaps requiring modifications. Alternatively, use the manufacturer’s GPLed driver code.
  • (link) Promise FastTrak TX2300/TX2200 (2-port) and TX4300/TX4200 (4-port) RAID SATA-II PCI cards — fakeraid. I gather that these have a programming interface differing from that of their sata_promise-compatible predecessors, but have no chip information so far: This entry is a placeholder.Promise offers a “ftsata2” proprietary driver (open-source wrapper around a binary-only, proprietary core library). Warning: Correspondent Andreas Thienemann warns that this driver works on Linux 2.4.x kernels only, and cannot be built to function on 2.6.x because it uses deprecated interfaces and references missing headers.
  • (link) Promise SuperTrak EX8300 8-port SATA-II PCI-X card and SuperTrak EX8350 8-port SATA-II PCI Express card — real hardware RAID(?). Uses Intel IOP331 I/O processor (XScale family) and Marvell 88SX6081 SATA chipset. Press releases says there’s a “full open source Linux driver” — which might be the Marvell driver(?). EX8500 card was demoed on 2005-08-23.
  • (link) ServerWorks Frodo / Apple K2 / Broadcom chip — libata’s sata_svw driver provides support a/o 2005-11. As of 2004-07-08, that driver supports the Apple K2 and ServerWorks Frodo4 (4-port) / Frodo8 (8-port) variants. Driver is now production quality. Other variants’ PCI IDs haven’t yet been collected, added to the driver, and tested. The Broadcom chip used appears not to be model BCM5770, so Broadcom’s proprietary “bcraid” driver likely won’t work. (Broadcom acquired ServerWorks in 2001.)
  • (link) SIIG SC-SAE012-S1 PCI-Express SATA-II card — fakeraid. Uses a Silicon Image 3132 chip.
  • (link) Silicon Image 3112 (2-port integrated chip) / 3114 / 3114R (4-port integrated chip) and 3512 / 3512A / 3514 (chip in 2-port PCI card) (Silicon Image, Inc. aka SiI, formerly CMD Technology, Inc.) — fakeraid. libata’s “sata_sil” driver (production quality) provides support (a/o 2004-07-08), or probably 2.4.x drivers/ide’s siimage driver (originally developed for the pre-SATA CMD680 aka SiI680 chip used in many ATA host adapters). Note that enabling libata support for this chipset requires enabling CONFIG_BROKEN (under “Code maturity level options”) in your kernel configuration, for reasons Garzik has explained. As of 2004-12, Silicon Image 311x became an open-standard hardware spec.An OEM (and apparently slightly modified) version of the SiI 3112 chip is sometimes integrated into motherboards as the ATI IXP400 SATA chip. In that form, it’s reportedly had support by libata’s “sata_sil” driver since the 2.6.11 kernel.

    I am still trying to untangle references to SiI’s model numbers. Strings within Silicon Image’s proprietary drivers suggest that that 3112, 3114, 3512, 3514, 434e, and 4e4e are chipset model numbers with the following “subdevice” numbers in their respective families. 3112: 3423, 6112. 3114: 3424, 6114. 3512: 3422, 3423, 6512. 3514: 3424 (note duplicate), 6514. That driver purports to be for “SiI SATA RAID Controllers 3x and 6x Series” and shows the identification string “SiI6514 (3112 to 6514) SATA RAID controller”.

    Daniel Paepcke has posted a HOWTO for building the sata_sil driver.

    ataraid support for SiI’s Medley fakeraid is available from 2.4.21 or later’s silraid (Arjan van de Ven’s) subdriver or its superior 2.4.26 and later replacement, medley (by Thomas Horsten). Note: So far, medley supports only Medley’s RAID0 “striped” mode, and not its RAID1 “mirrored” or RAID1+0 (AKA “RAID10”) modes. Alternatively, you can use Linux’s “md” software-RAID driver.

    Silicon Image, Inc’s proprietary, binary-only drivers are available from Tyan, Tekram, IBM, or Supermicro.

    Adaptec has released a proprietary “aarich” driver (source code wrapper surrounding a binary-only core library) for Intel ICH5-R and Silicon Image 3512. (The name is intended to be parsed as AAR-ICH, as it is intended for Adaptec AAR-series cards based on Intel ICH5 SATA-I chips.)

  • (link) Silicon Image 3124/3124-2 (chip in 4-port SATA-II PCI-X cards) and 3132 (chip in 2-port SATA-II PCI Express cards) (Silicon Image, Inc., formerly CMD Technology, Inc.) — libata’s sata_sil24 driver (production quality) supports Silicon Image 3124 (2005-08) and also the follow-on 2-port PCI Express SATA-II successor chip, the Silicon Image 3132. (Per 2004-07-08’s libata status report, Silicon Image provided Garzik with docs and sample hardware.)
  • (link) SiS 964 South Bridge, SiS 180 card — fakeraid. Supports hotplug and port multipliers. Is now (2004-03-01) supported in libata using driver “sata_sis” contributed by Uwe Koziolek. The 2.6.6 kernel added this driver a/o 2004-05-09. Driver is now production quality.Note that newer SIS chipsets have switched to the AHCI open standard.
  • (link) SiS 965L South Bridge — fakeraid. No known open-source drivers. Manufacturer’s propriatary, binary only SiSE 18x card driver also supports SiS 965L, but at present (2005-09), you need this in the modules.pcimap file to furnish the missing PCI ID: “sata_sis 0x00001039 0x00000182 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0”. I’d speculate that libata’s “sata_sis” driver might work to the same degree, but do not have confirmation.Note that newer SIS chipsets have switched to the AHCI open standard.
  • (link) Supermicro DAC-SATA-MV8 PCI card — uses a Marvell chip (which please see).
  • (link) Tekram PCI-X and PCI-Express cards — Inexpensive variants of similar models from Areca. E.g., Tekram SIR-1120 is near-identical to an Areca ARC-1120. Cards use Marvell chips.
  • (link) ULi Electronics, Inc. (formerly ALi) M1573 South Bridge and M5285, M5283, and M5281 SATA-I bridge chips — fakeraid. libata driver “sata_uli”. Driver is now production quality.
  • (link) ULi Electronics, Inc. (formerly ALi) AHCI-compatible chips — fakeraid. ULi’s M1575 4-port SATA-II PCI Express South Bridge is its first chipset to support the standard AHCI driver interface.
  • (link) ULi Electronics, Inc. (formerly ALi) M1567 SATA-II PCI Express South Bridge — fakeraid. Probably supports the standard AHCI driver interface (unconfirmed).
  • (link) VIA Technologies, Inc. VT6421 and VT6421L PCI chips &mdash fakeraid. A libata-dev patch was posted on 2005-02-06.
  • (link) VIA Technologies, Inc. VT8235M South Bridge chipset. — fakeraid. Driver status unknown.
  • (link) VIA Technologies, Inc. VT8237 and VT8237A South Bridge chipset, using VIA’s VT6420 Serial ATA chip — fakeraid. libata’s “sata_via” driver set provides support a/o 2005-11 (included since kernel v. 2.6.3). Driver is now production quality. Recent 2.4.x drivers/ide code should support it, too. Proprietary drivers available.
  • (link) VIA Technologies, Inc. VT8237R and VT8237R+ South Bridge chipset — fakeraid. 2-port chip, said to support RAID 0, 1, 0+1 and JBOD. Might be based on VIA’s VT6421L Serial ATA chip(?). Driver status unknown. The “+” variant is said to differ from the earlier non-plus variant in having forwards compatibility for SATA-II drives.
  • (link) VIA Technologies, Inc. VT8251 PCI Express South Bridge chipset — fakeraid. This 4-port SATA-II chipset (used in some new a/o 2005-11 motherboards such as the ASUS A7V-MX) is claimed to use the standard AHCI driver interface, though one correspondent had no luck a/o 2005-11-15 — possible just a PCI ID problem? Uniquely (to my knowledge) for a fakeraid adapter, it supports RAID 5 along with RAID levels 0 and 1.
  • (link) Vitesse Semiconductor Corp. VSC7174 Serial ATA chip — libata’s sata_vsc (by Jeremy Higdon) was added as of the 2.6.5 kernel. Driver is now production quality. No RAID functionality, in itself: Chip can be embedded on a NAS controller card with a separate RAID chip. Supports hotplug and port multipliers.


Feb 05 2009

Spring事务传播方式

Category: 技术ssmax @ 13:10:14

事务传播行为种类

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

1事务传播行为类型

事务传播行为类型

说明

PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。


Feb 05 2009

Spring配置事务的几种方式

Category: 技术ssmax @ 12:53:26

这几天搞spring的事务,试过了几种方式,现在归纳一下,前面两种都是xml格式的,后面一种是AspectJ的

1、最基本的,基于bean定义的方式,这种方式就是通过BeanNameAutoProxyCreator和拦截器来实现,比较适用于旧版本的Spring

<beans>
    <!– Transaction manager for a single Hibernate SessionFactory (alternative to JTA) –>
    <bean id=”transactionManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>
        <property name=”sessionFactory”>
            <ref bean=”sessionFactory”/>
        </property>
    </bean>

    <bean id=”transactionInterceptor” class=”org.springframework.transaction.interceptor.TransactionInterceptor”>
        <property name=”transactionManager” ref=”transactionManager”/>?
          <property name=”transactionAttributes”>
             <props>
                  <prop key=”*”>PROPAGATION_REQUIRED</prop>
                  <prop key=”find*”>PROPAGATION_REQUIRED,readOnly</prop>
             </props>
          </property>
    </bean>

    <bean class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
        <property name=”beanNames”>
            <value>*Service,*Manager</value>
        </property>
        <property name=”interceptorNames”>
            <list>
                <value>transactionInterceptor</value>
                <!– 此处增加新的Interceptor –>
            </list>
        </property>
    </bean>

    <bean class=”org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor”>
        <property name=”transactionInterceptor” ref=”transactionInterceptor”/>?
    </bean>

    <bean id=”userManager” class=”some.package.UserManagerImpl” autoWire=”byName”/>

</beans>

 

2、这种方式是基于xml的aop设置,这种方式就是基于aop的xml配置,有切入点和通知,好处是不用在下面的Bean里面用AspectJ

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
     xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
     xmlns:aop=”http://www.springframework.org/schema/aop”
     xmlns:tx=”http://www.springframework.org/schema/tx”
     xsi:schemaLocation=”
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”>

<bean id=”testPropertyConfigurer” class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer” scope=”singleton”>
 <property name=”location”>
  <value>classpath:service.properties</value>
 </property>
</bean>

<bean id=”testDataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource” scope=”singleton”>
 <property name=”driverClass” value=”com.mysql.jdbc.Driver”></property>
 <property name=”jdbcUrl” value=”${jdbc.url}”></property>
 <property name=”user” value=”${jdbc.user}”></property>
 <property name=”password” value=”${jdbc.password}”></property>
        <property name=”autoCommitOnClose” value=”false”/>
        <property name=”initialPoolSize” value=”3″/>
        <property name=”minPoolSize” value=”3″/>
        <property name=”maxPoolSize” value=”10″/>
        <property name=”maxIdleTime” value=”7200″/>
        <property name=”acquireIncrement” value=”3″/>
        <property name=”checkoutTimeout” value=”15000″/>
        <property name=”maxIdleTimeExcessConnections” value=”3600″/>
</bean>

<bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
 <property name=”dataSource” ref=”testDataSource”/>
</bean>
 
<tx:advice id=”txAdvice” transaction-manager=”txManager”>
 <tx:attributes>
  <tx:method name=”get*” read-only=”true” />
  <tx:method name=”*” propagation=”REQUIRED” />
 </tx:attributes>
</tx:advice>

<aop:config>
 <aop:pointcut id=”testOperation” expression=”execution(* com.test.ooxx.BeanB.*(..))”/>
 <aop:advisor advice-ref=”txAdvice” pointcut-ref=”testOperation”/>
</aop:config>

<bean id=”Bean_A” class=”com.test.ooxx.BeanA” scope=”singleton”>
 <property name=”dataSource” ref=”testDataSource”></property>
</bean>
<bean id=”Bean_B” class=”com.test.ooxx.BeanB” scope=”prototype”>
<property name=”a” ref=”Bean_A”></property>
</bean>
</beans>

 

3、最后这种就是AspectJ的定义

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
     xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
     xmlns:aop=”http://www.springframework.org/schema/aop”
     xmlns:tx=”http://www.springframework.org/schema/tx”
     xsi:schemaLocation=”
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”>

<bean id=”testPropertyConfigurer” class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer” scope=”singleton”>
 <property name=”location”>
  <value>classpath:service.properties</value>
 </property>
</bean>

<bean id=”testDataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource” scope=”singleton”>
 <property name=”driverClass” value=”com.mysql.jdbc.Driver”></property>
 <property name=”jdbcUrl” value=”${jdbc.url}”></property>
 <property name=”user” value=”${jdbc.user}”></property>
 <property name=”password” value=”${jdbc.password}”></property>
        <property name=”autoCommitOnClose” value=”false”/>
        <property name=”initialPoolSize” value=”3″/>
        <property name=”minPoolSize” value=”3″/>
        <property name=”maxPoolSize” value=”10″/>
        <property name=”maxIdleTime” value=”7200″/>
        <property name=”acquireIncrement” value=”3″/>
        <property name=”checkoutTimeout” value=”15000″/>
        <property name=”maxIdleTimeExcessConnections” value=”3600″/>
</bean>

<bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
 <property name=”dataSource” ref=”testDataSource”/>
</bean>
<tx:annotation-driven transaction-manager=”txManager”/>

<bean id=”Bean_A” class=”com.test.ooxx.BeanA” scope=”singleton”>
 <property name=”dataSource” ref=”testDataSource”></property>
</bean>
<bean id=”Bean_B” class=”com.test.ooxx.BeanB” scope=”prototype”>
<property name=”a” ref=”Bean_A”></property>
</bean>
</beans>

 

这种方式在类方法里面要用AspectJ声明:

@Transactional(readOnly=false, propagation=Propagation.REQUIRED)
 public boolean process() {…}