动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Java学习过程的一些重点(二).
.实例:用Java的加密机制来保护你.
.高级图像处理图像I/O API RC 1.0.
.Java伴侣.
.深入浅出Java多线程程序设计.doc.
.Java与.NET 的Web Services相互调.
.什么是J2ME及其基本慨念.
.Eclipse使用入门.
.用JavaBean实现文件上载(5).
.MIDP1.0小游戏入门-五子棋1.0.
.Java语言的Calendar和Date类.
.在S1AS7中配置 Informix的方法.
.link-list java版.
.用Javamail写的解析MimeMessage的.
.java使用ant来编译.
.条件编译.
.Java 在Client/Server 网络中的应.
.oracle中的数据库乱码的原因与解.
.再论枚举器.
.使用HttpContext的User属性来实现.

开发 Web 应用程序的快捷途径介绍

发表日期:2008-1-5 |



  共享物理连接
  共享一个连接只能在共享作用域中发生。最常见的共享作用域是多个活动的连接句柄可以共享同一物理连接的事务作用域。在 Application Server V5 中有两个事务作用域:全局事务和本地事务容器(Local Transaction Containment,LTC)边界。
  
  全局事务可以是由 J2EE 应用程序启动的用户事务,或者是由 Application Server Enterprise Java Bean(EJB)容器所启动的容器全局事务。当使用 Required 或 RequiresNew 事务属性配置了 EJB 方法时,EJB 容器就启动一个全局事务。当使用 Required、Supports 或 Mandatory 事务属性配置了 EJB 方法时,EJB 容器也可以使用客户端的全局事务。注重 EJB 的客户端可以是 J2EE 应用程序、Servlet、jsp 或另一个 EJB。
  LTC 边界与资源治理器本地事务(Resource Manager Local Transaction,RMLT)是有区别的,后者是本地事务的资源视图。LTC 是一个作用域,在它里面可以访问多个 RMLT。在没有全局事务的时候,通常由容器来建立 LTC。LTC 的一个示例是含事务属性 NotSupported 的 Bean 方法的执行。 RMLT 的一个示例是将 autocommit 设置为 false,稍后再提交连接。
  在 Application Server 中,连接共享作用域是全局事务。虽然在 LTC 中调用多次 getConnection 可以返回具有同一物理连接的多个连接句柄,该物理连接被连续重用,但是并没有被共享。此行为是"连接串行重用(connection serial reuse)。"后面将讨论 LTC 中的连接串行重用。
  
  正如上面所提到的,假如一个应用程序的部署描述符元素 res-sharing-scope 被设置为 shareable,并且符合某些条件,那么在此应用程序中多次调用 getConnection 符合共享同一连接的条件。要让一个共享作用域中调用多次 getConnection 返回同一物理连接,下列连接特性必须一致:
  
  Java 命名和目录接口(Java Naming and Directory Interface,JNDI)名称。 虽然 JNDI 名称实际上不是一个连接特性,但是此必要条件表示您只能共享来自位于相同服务器进程的相同数据源的连接。您必须在应用程序服务器中的相同数据源上调用两次 getConnection 调用以共享一个物理连接。
  资源认证设置。使用资源引用的资源认证设置来指定应用程序组件供给者如何将一个主体(用户 ID 和密码)联系到一个资源治理器。对于非 CMP 应用程序,资源认证由 res-auth 部署描述符来标识。它的值是 Application 或 Container。Application Server 也为 CMP 连接工厂的资源认证提供一个 IBM 扩展。该设置由 IBM 部署描述符扩展文件 ibm-ejb-jar-ext.xmi 中的 resAuth 元素来标识。您可以将 resAuth 的值设置为 Per_Connection_Factory 或 Container。Per_Connection_Factory 与 res-auth 部署描述符的 Application 值一致。当两个数据源或连接工厂引用与 Application Server 中的一个数据源相关联,那么在(并且仅在)这两个引用拥有相同的资源认证值的情况下连接是可共享的。要查阅有关资源认证的描述,请参考 WebSphere Application Server V5 中的数据库验证。
  主体。相同的主题表示相同的用户和密码对于相关的数据库是必需的。假如应用程序使用一个不同的用户 ID 和密码来获取连接,那么从 getConnection 调用返回的物理连接将是不同的。当应用程序的资源认证设置被设置为 Application 时,您可以通过 getConnection() 或 getConnection(String userid, String passWord) 来获取连接。请注重,即使与数据源相关联的受组件治理的认证别名在所使用的 getConnection(String userid, String password) 中有相同的用户 ID 和密码,从这两个调用获取的连接也不是共享的。
  连接事务隔离级别特性。在 Application Server 中,您可以通过几种方法来指定获取的连接所使用的隔离级别:
  您可以使用访问意图来指定事务隔离级别。
  您可以使用 IBM 扩展(在 IBM 扩展文件中指定为 isolationLevel)来指定特定应用程序的数据源引用的隔离级别。
  您可以将事务隔离级别设置为 IBM 扩展 API(JDBCConnectionSpec),然后使用 WSDataSource.getConnection(JDBCConnectionSpec)来获取连接。要共享同一物理连接,在一个给定事务中的多个 getConnection 调用的事务隔离级别必须是相同的。请注重,IBM 扩展 API-JDBCConnectionSpec 是一个私有 API。假如您使用这个 API,您的应用程序将不能转换到其他应用程序服务器。
  连接 readOnly、catalog 和 typeMap 特性。正如同连接事务隔离级别,这三个连接特性对多个 getConnection 调用必须是相同的,以共享同一物理连接。应用程序可以使用 JDBCConnectionSpec 来指定这三个特性的值。
  假如上述必要条件中的一个没有满足,那么两个 getConnection 调用将返回不同的物理连接。
  
  清单 1 显示了在一个用户事务中共享同一物理连接的两个连接句柄。资源引用的资源共享作用域被设为 Shareable。连接 conn1 和 conn2 是从同一数据源 ds 获取的两个连接句柄。由于这两个连接是在一个共享作用域(在本例中,是一个用户事务)中获取的,并且所有的共享必要条件都已满足,所以 conn1 和 conn2 共享同一物理连接。
  
  假如将一个应用程序的部署描述符中的 res-sharing-scope 部署描述符元素设置为 Unshareable,那么这些连接不共享同一物理连接。在一个全局事务或 LTC 中的多个 getConnection 调用将返回包含不同物理连接的连接句柄。
  
  清单 1. 在一个用户事务中共享连接
  
  // Start a user transaction
  userTransaction.begin();
  
  // Get the first connection
  java.sql.Connection conn1 = ds.getConnection();
  java.sql.Statement stmt1 = conn1.createStatement();
  ...
  
  // Get the second connection
  java.sql.conenction conn2 = ds.getConnection();
  java.sql.Statement stmt2 = conn2.createStatement();
  ...
  
  // Commit the user transaction
  userTransaction.commit();
  
  LTC 中的连接串行重用
  在一个本地事务容器(Local Transaction Containment,LTC)边界中,您不能拥有多个使用同一物理连接的活动连接句柄。然而,假如前面的包装相同物理连接的连接句柄已关闭,那么您可以重用该物理连接。在您使用如下模式时将发生连接重用:
  
  获得连接 1 -> 使用连接 1 -> 提交/回滚连接1(可选) -> 关闭连接 1 -> 获得连接 2 -> 使用连接 2 -> 提交/回滚连接 2(可选) -> 关闭连接 2 -> ...
  假设使用了相同的特性并且没有将 res-sharing-scope 设置为 unshareable,那么从第二个 getConnection 返回的连接与从第一个 getConnection 返回的连接相同。因为连接的使用是串行的,在同一时间仅有一个到基础物理连接的连接句柄,所以没有发生真正的连接共享。因此,物理连接被"串行重用(serially reused)。" 请注重,在本模式中提交和回滚连接是可选的。也就是说,即使第一个连接没有被提交或回滚,一旦前一连接已关闭,第二个 getConnection 仍然返回相同的物理连接。您必须注重下列语句隐藏的事务语义:"连接句柄 2 的回滚或提交将回滚或提交对连接句柄 2 所做的工作。它也将回滚或提交对连接句柄 1 所做的工作。"
  
  清单 2 显示了在一个 LTC 中两个连接句柄重用相同的物理连接。该代码在一个 Web 应用程序(Servlet)中,或者位于在全局事务边界内未执行的 EJB 方法中。在没有全局事务边界的情况下,将建立 LTC 边界。在本应用程序中,连接 conn1 从数据源 ds 获得,然后连接 conn1 的 autocommit 值被设为 false。再将记录 1 插入到数据库中。在此之后,没有经过提交或回滚连接,连接 conn1 就被关闭了。然后从相同的数据库 ds 获得连接 conn2。由于用来获得连接 conn2 的连接特性与用来获得连接 conn1 的连接特性相同,并且连接 conn1 已关闭,所以连接 conn2 重用相同的物理连接。在此之后,conn2 的 autocommit 被设置为 false(重用连接,所以不需要将 autocommit 设置为 false,因为它已经是 false),然后记录 2 被插入到数据库中。当回滚连接 conn2 时,不仅回滚了记录 2 插入,同时也回滚了记录 1 插入。
  
  清单 2. 在 LTC 边界中重用连接
  
  // Get the first connection
  java.sql.Connection conn1 = ds.getConnection();
  conn1.setAutoCommit(false)
  java.sql.Statement stmt1 = conn1.createStatement();
  
  //use statement1 to insert record 1
  ... ...
  
  conn1.close();
  
  java.sql.conenction conn2 = ds.getConnection();
  conn2.setAutoCommit(false);
  java.sql.Statement stmt2 = conn2.createStatement();
  
  //use statement 2 to insert record 2
  ... ...
  conn2.rollback();
  conn2.close();
  
  编程模型
  共享连接使应用程序更具有可伸缩性。它减少了资源分配,还减少了出现死锁情况的机会。然而,在共享连接时是有限制的。例如,不答应在可共享的连接上设置特性,这是因为一个连接句柄的用户可能无法预见由其他连接句柄做出的更改。该限制是 J2EE 1.3 标准的一部分。
  
  在某些情况下,您不希望应用程序共享物理连接。一个原因在于该应用程序可能需要更改连接属性,而那些更改对于可共享连接是不被答应的。然而,除了增加资源分配消耗之外,还有其他有关使用不可共享连接的约束。
  
  让我们在此查看清单 1 中的代码。假设数据源的资源引用被标记为 Unshareable。连接句柄 conn1 和 conn2 将有不同的物理连接。该应用程序在下
上一篇:细说Web应用开发的一致框架Tapestry 人气:241
下一篇:使用 WebLogic Platform 8.1进行威胁防护概述 人气:435
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵