JTA(Java Transaction API)
2008-07-31 10:20
一般情况下,J2EE应用服务器支持JDBC事务、JTA事务、容器管理事务。这里讨论JTA和JDBC事务的区别。这2个是常用的DAO模式事务界定方式。
JDBC 事务
JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。
★ 在jdbc中,事务操作缺省是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
★ 在jdbc中,可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调 用commit()来进行整体提交,倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常;此时就可以在异常捕获时调用 rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性,示例如下:
try {
conn =
DriverManager.getConnection
("jdbc:oracle:thin:@host:1521:SID","username","userpwd"; ......
package test;
import java.io.File;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.filetransfer.FileTransfer;
import org.jivesoftware.smackx.filetransfer.FileTransferListener;
import org.jivesoftware.smackx.filetransfer.FileTransferManager;
import org.jivesoftware.smackx.filetransfer.FileTransferRequest;
import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer;
import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;
/**
* 演示XMPP发送接收消息和文件的功能
*
* @author 王杰
* @date 2010-1-14 16:59:24
*/
public class XMPPTest {
private static void handleTransferRequest(FileTransferRequest request) {
File file = new File(request.getFileName());
&nbs ......
软件开发基础
计算机是执行程序指令的电子设备,输入、输出、存储和处理
CPU部件:算术逻辑单元(ALU),控制单元
存储器:主存储器(临时存储数据),辅助存储器(永久存储)
RAM:随机访问存储器—内存条
ROM:只读存储器—可以访问和读取但不能修改
Cache:高速缓存
一个字节(Byte)等于8位(bit)
软件的分类:系统软件、通用软件、应用软件、编程语言
编程语言分类:机器语言(第一代)、汇编语言(第二代)
二进制、十进制、十六进制的转换
十进制转二进制,可以采用除2取模,商为1时停止,然后从下往上组合即是相应的二进制
十进制小数转二进制乘2取整,先取的作为高位
&nb ......
java -cp .;c:\dir1\lib.jar Test
-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”
分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。
虽然现在都有eclipse之类的IDE了,但有时候后会手工编译和运行一些程序,很多人包括多年开发经验的人都不知道怎么在命令行参
数运行类。有点杯具……
使用范例:
java -cp ..\lib\hsqldb.jar org.hsqldb.Server -database mydb
或
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb ......
JAVA异常可以分为三种:
1.checked 异常
编译器保证所有的checked异常都会得到处理,这样就可以在编译期检查异常处理。通常自定义的异常应该为此类型
2.runtime异常
是JVM在程序运行期发现的无效操作,例如NullPointerException
3.Errors
由JVM检测到的失败操作,例如OutOfMemoryError ......
大家都知道JAVA中使用OBJECT作为唯一的基类。但是JAVA的设计者为什么要这样做呢?重读《TTHINKING IN JAVA》,得出以下原因:
1,JAVA是纯面向对象的语言。单继承体系保证了所有新建的或JDK中已有的类都必须继承自OBJECT。这样,保证了所有的类都具有一些基本的方法。例如一个String对象有toString()方法,另外一个Math对象也有这个方法,不需要为每个对象都去写一个这样的方法。
2,java中有个垃圾回收器机制,当一个对象不再被需要时,由垃圾回收器回收并销毁这个对象,释放它占用的内存空间。而单继承体系让垃圾回收器的实现变得简单多了。这缘于每个对象都具有从OBJECT继承而来的finalize
()
方法。
3,OBJECT中有个getClass()方法,得到对象的运行时类。这样就保证了每个JAVA对象都在运行时具有一个运行时类的信息。
4,有利于容器的复用。JAVA设计让容器可以存储OBJECT,这也就意味着可以存储其它任何类型。当然,涉及到容器存储,有个对象的向上转型和向下转型。具体过程是这样的:我们放入容器中的,其实是对象的引用,但是由于容器只存储OBJECT对象,所以所有的对象引用都要被向上转型为OBJECT,但是在从容器中取出对象的时候,所获取到的,其实是对一个OBJECT ......