|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。事件处置|数据|数据库 择要本文先容在Java中举行事件处置的办法,经由过程实例分离报告了怎样接纳JavaBean、Ejb组件完成J2EE使用服务器撑持的JDBC事件、JTA(JavaTransactionAPI)事件。
关头词JavaBean,EJB,数据库,事件处置,JTA
JavaBean
JavaBean是用Java言语编写的与平台有关的组件。它是形貌Java的软件组件模子,有点相似于Microsoft的COM组件的观点。在Java模子中,经由过程JavaBean能够无穷扩大Java程序的功效,经由过程JavaBean的组合能够疾速的天生新的使用程序。JavaBean能够完成代码的反复使用,关于程序的易保护性也有严重的意义。非可视化的JavaBean,在JSP程序中经常使用来封装事件逻辑、数据库操纵等,能够很好的完成营业逻辑和前台程序的分别。JavaBean在服务器真个使用方面体现出了愈来愈强的性命力。
EJB
EJB手艺界说了一组可重用的组件:EnterpriseJavaBeans。你能够使用这些组件,像搭积木一样的创建你的散布式使用程序。当你把代码写好以后,这些组件就被组合到特定的文件中往。每一个文件有一个或多个EnterpriseBeans,在加上一些设置参数。最初,这些EnterpriseBeans被设置到一个装了EJB容器的平台上。客户可以经由过程这些Beans的home接口,定位到某个beans,并发生这个beans的一个实例。如许,客户就可以够挪用Beans的使用办法和远程接口。EJB手艺简化了用JAVA言语编写的企业使用体系的开辟、设置和实行。有三品种型的Enterprisebeans:Sessionbeans、entitybeans和Message-drivenBeans。
事件处置
信息是任何企奇迹单元的主要资产,任何企业部门都包括着信息的流进、流出,任何企业部门都把持着某些信息。同时,信息必需在得当的机会传布给必要的人。并且,信息还必要平安束缚,一般依据信息的范例和内容实行会见把持。为了包管数据的平安无效和准确牢靠,数据库办理体系(DBMS)必需供应一致的数据回护功效。
事件是古代数据库实际中的中心观点之一。假如一组处置步骤大概全体产生大概一步也不实行,我们称该组处置步骤为一个事件。当一切的步骤像一个操纵一样被完全地实行,我们称该事件被提交。因为个中的一部分或多步实行失利,招致没有步骤被提交,则事件必需回滚(回到最后的体系形态)。事件必需从命ISO/IEC所制订的ACID准绳。ACID是原子性(atomicity)、分歧性(consistency)、断绝性(isolation)和耐久性(durability)的缩写。事件的原子性暗示事件实行过程当中的任何失利都将招致事件所做的任何修正生效。分歧性暗示当事件实行失利时,一切被该事件影响的数据都应当恢复到事件实行前的形态。断绝性暗示在事件实行过程当中对数据的修正,在事件提交之前对其他事件不成见。耐久性暗示已提交的数据在事件实行失利时,数据的形态都应当准确。
鄙人面我们枚举一个利用SQLServer数据库举行事件处置的例子。主表是一个规章轨制信息表(bylaw),次要字段有纪录编号、题目、作者、誊写日期等。两个子表分离是附件表(bylaw_affix)和文本信息表(bylaw_content)。表布局见所示。bylaw表的纪录编号与bylaw_affix表的纪录编号、bylaw_content表的纪录编号是对应的,每次对规章轨制信息的操纵也就是对这三个表的团结操纵。比方要删除规章轨制中的一笔记录,假如不利用事件,便可能会呈现如许的情形:第一个表中乐成删除后,数据库俄然呈现不测情况,而第2、三个表中的操纵没有完成,如许,删除操纵并没有完成,乃至已损坏数据库中的数据。要制止这类情形,就应当利用事件,它的感化是:要末三个表都操纵乐成,要末都失利。换句话说,就是坚持数据的分歧性。以是,为了确保对数据操纵的完全和分歧,在程序计划时要充实思索到事件处置方面的成绩。
示例表布局
Java中的事件处置
一样平常情形下,J2EE使用服务器撑持JDBC事件、JTA(JavaTransactionAPI)事件、容器办理事件。一样平常情形下,最好不要在程序中同时利用上述三种事件范例,好比在JTA事件中嵌套JDBC事件。第二方面,事件要在尽量短的工夫内完成,不要在分歧办法中完成事件的利用。上面我们枚举两种事件处置体例。
1、JavaBean中利用JDBC体例举行事件处置
在JDBC中如何将多个SQL语句组分解一个事件呢?在JDBC中,翻开一个毗连对象Connection时,缺省是auto-commit形式,每一个SQL语句都被看成一个事件,即每次实行一个语句,城市主动的失掉事件确认。为了能将多个SQL语句组分解一个事件,要将auto-commit形式屏障失落。在auto-commit形式屏障失落以后,假如不挪用commit()办法,SQL语句不会失掉事件确认。在比来一次commit()办法挪用以后的一切SQL会在办法commit()挪用时失掉确认。
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//变动JDBC事件的默许提交体例
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
con.commit();//提交JDBC事件
con.setAutoCommit(true);//恢复JDBC事件的默许提交体例
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滚JDBC事件
exc.printStackTrace();
dbc.close();
return-1;
}
}
2、SessionBean中的JTA事件
JTA是事件服务的J2EE办理计划。实质上,它是形貌事件接口(好比UserTransaction接口,开辟职员间接利用该接口大概经由过程J2EE容器利用该接口来确保营业逻辑可以牢靠地运转)的J2EE模子的一部分。JTA具有的三个次要的接口分离是UserTransaction接口、TransactionManager接口和Transaction接口。这些接口共享大众的事件操纵,比方commit()和rollback(),可是也包括特别的事件操纵,比方suspend(),resume()和enlist(),它们只呈现在特定的接口上,以便在完成中同意必定水平的会见把持。比方,UserTransaction可以实行事件分别和基础的事件操纵,而TransactionManager可以实行高低文办理。
使用程序能够挪用UserTransaction.begin()办法入手下手一个事件,该事件与使用程序正在个中运转确当前列程相干联。底层的事件办理器实践处置线程与事件之间的联系关系。UserTransaction.commit()办法停止与以后线程联系关系的事件。UserTransaction.rollback()办法将保持与以后线程联系关系确当前事件。
publicintdelete(intsID){
DataBaseConnectiondbc=null;
dbc=newDataBaseConnection();
dbc.getConnection();
UserTransactiontransaction=sessionContext.getUserTransaction();//取得JTA事件
try{
transaction.begin();//入手下手JTA事件
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
transaction.commit();//提交JTA事件
dbc.close();
return1;
}
catch(Exceptionexc){
try{
transaction.rollback();//JTA事件回滚
}
catch(Exceptionex){
//JTA事件回滚堕落处置
ex.printStackTrace();
}
exc.printStackTrace();
dbc.close();
return-1;
}
}
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. |
|