﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-简单-高效-优雅</title><link>http://www.blogjava.net/spec-second/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:56:04 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:56:04 GMT</pubDate><ttl>60</ttl><item><title>关于几个电信方面的概念</title><link>http://www.blogjava.net/spec-second/archive/2008/12/20/247540.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Sat, 20 Dec 2008 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/12/20/247540.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/247540.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/12/20/247540.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/247540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/247540.html</trackback:ping><description><![CDATA[<span style="font-family: Times New Roman;"><strong>BOSS<br />
</strong></span>电信业务运营支持系统(BOSS)，面对客户是统一的；面对电信运营商，它融合了业务支撑系统(BSS)与运营支撑系统(OSS)，是一个综合的业务运营和管理平台，同时也是真正融合了传统IP数据业务与移动增值业务的综合管理平台。<br />
<br />
OSS/BSS是电信运营商的一体化、信息资源共享的支持系统，它主要由网络管理、系统管理、计费、营业、账务和客户服务等部分组成，系统间通过统一
的信息总线有机整合在一起。它不仅能在帮助运营商制订符合自身特点的运营支撑系统的同时帮助确定系统的发展方向，还能帮助用户制订系统的整合标准，改善和
提高用户的服务水平。<br />
<span style="font-family: Times New Roman;"><strong><br />
OSS（Operation-Support System）：运行支持系统</strong></span><strong></strong><br />
运营支撑系统(OSS)，是一个综合的业务运营和管理平台，同时也是真正融合了传统IP数据业务与移动增值业务的综合管理平台。OSS是电信运营商的一
体化、信息资源共享的支持系统，它主要由<strong>网络管理</strong>、<strong>系统管理</strong>、<strong>计费、营业、账务和客户服务</strong>等部分组成，<strong>系统间通过统一的信息总线有机整合在一起</strong>。它不仅能在帮助运营商制订符合自身特点的运营支撑系统的同时帮助确定系统的发展方向，还能帮助用户制订系统的整合标准，改善和提高用户的服务水平。<br />
<br />
<strong>BSS（业务支持系统）</strong><br />
BSS系统的设计目标包括客户关系管理（CRM）、业务供应链管理（SCM），经营决策支持系统（DSS）。<br />
<img src ="http://www.blogjava.net/spec-second/aggbug/247540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-12-20 20:39 <a href="http://www.blogjava.net/spec-second/archive/2008/12/20/247540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Java的UDP支持</title><link>http://www.blogjava.net/spec-second/archive/2008/12/11/245703.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Thu, 11 Dec 2008 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/12/11/245703.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/245703.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/12/11/245703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/245703.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/245703.html</trackback:ping><description><![CDATA[昨天与客户的交流中，谈到为什么不使用java来发UDP包，而使用C++，说不是基于性能的考虑，在高压的情况下，java实现容易丢包，丢包的概率在8%~10%，而C++实现能够控制在5%。不知道为什么原因，看来有空得研究研究了<br />
<br />
先立个标题在这里<br />
<br />
<img src ="http://www.blogjava.net/spec-second/aggbug/245703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-12-11 14:48 <a href="http://www.blogjava.net/spec-second/archive/2008/12/11/245703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>需求杂说</title><link>http://www.blogjava.net/spec-second/archive/2008/09/15/228950.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Mon, 15 Sep 2008 00:10:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/15/228950.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/228950.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/15/228950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/228950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/228950.html</trackback:ping><description><![CDATA[<p><span style="font-family: 微软雅黑"><strong style="font-size: 18pt; color: #000080">一、需要需求的地方有：<br />
</strong></span><br />
1、项目的范围；<br />
2、成本估算；<br />
3、预算；<br />
4、项目计划；<br />
5、软件设计和测试；<br />
6、文档和培训手册；<br />
<br />
<strong style="font-size: 18pt; color: #000080; font-family: 微软雅黑">二、记录需求的方式有：<br />
</strong><br />
1、Stackholder的需要（涉众的需要）；<br />
2、软件特性；<br />
3、软件需求规格，要求无二义性，完整，一致，可跟踪，并且不含设计信息；<br />
<br />
它们的层次如下<br />
<img height="216" alt="" src="http://www.blogjava.net/images/blogjava_net/spec-second/level-problem.jpg" width="290" border="0" /><br />
<br />
<span style="font-size: 24pt; font-family: 微软雅黑"><strong style="font-size: 18pt; color: #000080">三、需求产物<br />
<br />
</strong></span></p>
<li><strong>业务用例模型。</strong> 所期望系统的目标经常是要解决业务问题或通过提供增值服务开拓商业机会。业务用例将用例的概念扩展为描述业务过程。业务用例模型（与业务用例规格说明一起）提供了一种评价所期望系统范围的方式－－有些部分可以自动化，有些部分不能，有些部分可以通过更改业务过程来进行。这就允许我们从一种业务观点来评价用例模型的完整性，因为每个系统用例必须支持一个或更多的业务用例。
<li><strong>业务实体和领域模型。</strong> 大多数系统需要操作和展现业务信息。一个业务实体将一组相关信息字段表示为类。业务实体通过一个业务过程（例如业务用例）被处理和操作，它们接着通过系统用例被自动化。所有业务用例及它们关系的总和组成了领域模型，领域模型描述了问题域。每个系统用例将操作一些实体，并且实体通常被包括在多个系统用例中。
<li><strong>业务规则。</strong> 今天，系统的复杂性通常是由系统必须符合的业务规则的复杂性所导致的结果。业务规则将被业务用例和系统用例来表示，并且可以是各种形式，决策表，计算规则，决策树，时间图（描述哪些事件必须发生在其它事件之前或之后，以及从中产生的过程），运算法则，等等。在用例流中描述业务规则通常会把用例规格弄得混乱。因此，它们通常是在单独的工件中被捕获，或者是作为用例规格的附加物。
<li><strong>用户体验模型和情节串连图板</strong> 用户体验建模是捕获用户界面需求而不借助于画出屏幕布局的一种便利方式，画出屏幕布局的方式可能要花费巨大的工作量，并且非常可能发生变更。用户体验建模将实际的用户界面屏幕抽象为一个UML类，其原型是&#171;screen&#187;。属性确定了用户在一个屏幕上可以看到什么；操作确定了用户在每个屏幕上可以做什么；并且关联关系确定了航行路线。用户体验情节串连图板是用户体验模型的子集，用于描述与系统用例有关的屏幕。
<li><strong>补充规格说明。</strong> 补充规格说明描述了影响多个用例的需求。例如，所有用例都服从权限控制，审计跟踪，个性化，等等。补充需求实际上通常是技术方面的，并且可以是关联于功能、可用性、可靠性、性能以及可支持性。它们通常被表示为&#8220;系统应做 ...&#8221;形式的陈述语句
<p><img height="244" alt="" src="http://www.blogjava.net/images/blogjava_net/spec-second/artifacts.jpg" width="490" border="0" /></p>
<p>&nbsp;</p>
</li>
<img src ="http://www.blogjava.net/spec-second/aggbug/228950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-15 08:10 <a href="http://www.blogjava.net/spec-second/archive/2008/09/15/228950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IBM定义的六个体系结构类型</title><link>http://www.blogjava.net/spec-second/archive/2008/09/15/228949.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Sun, 14 Sep 2008 23:36:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/15/228949.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/228949.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/15/228949.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/228949.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/228949.html</trackback:ping><description><![CDATA[<ol>
    <li><strong>企业体系结构（Enterprise architecture）</strong>。企业架构师致力于将 IT 功能映射到业务需要。该架构师全面负责企业的软件密集系统，包括多个应用程序之间的关系、应用程序之间共享的数据、应用程序的集成以及运行应用程序的基础设施。
    <li><strong>应用程序体系结构（Application architecture）</strong>。应用程序架构师致力于应用程序的设计，以实现业务流程的自动化并提供帮助用户执行业务任务的功能。该架构师的职责包括设计应用程序来满足用户的功能和服务质量要求，包括性能、可用性、可伸缩性、安全性和完整性。他们的职责还包括评估并选择运行应用程序所必需的软件和硬件，以及用于开发应用程序的工具和方法。
    <li><strong>信息体系结构（Information architecture）</strong>。信息架构师致力于多个应用程序所使用的数据，包括该数据的结构、完整性、安全性和可访问性。该架构师的职责包括设计、构建、测试、安装、操作和维护用于管理该数据的系统。这些系统的设计必须考虑到数据要求，例如源、位置、完整性、可用性、性能和使用寿命。
    <li><strong>基础设施体系结构（Infrastructure architecture）</strong>。基础设施架构师致力于硬件和服务器软件的设计，包括服务器计算机、存储、工作站、中间件、非应用程序软件、网络以及支持企业所需应用程序和业务流程的物理设施。该架构师的职责包括这些组件的评估和选择、用于验证设计和所选产品的建模、模拟和测试工作，以及最终获得的基础设施的性能、可用性和可伸缩性。
    <li><strong>集成体系结构（Integration architecture）</strong>。集成架构师致力于支持现有应用程序、打包软件产品、网络和系统在企业中或企业之间协同工作的解决方案设计。这些解决方案可能使用不同的技术、供应商、平台和计算类型。
    <li><strong>操作体系结构（Operations architecture）</strong>。操作架构师致力于管理企业所使用的基础设施和应用程序的解决方案设计。该架构师的职责包括为复杂信息系统的安装、操作、迁移和管理定义计划、策略和体系结构。 </li>
</ol>
<p>它们之间的关系为：<br />
<img height="83" alt="" src="http://www.blogjava.net/images/blogjava_net/spec-second/fig01.gif" width="396" border="0" /></p>
<img src ="http://www.blogjava.net/spec-second/aggbug/228949.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-15 07:36 <a href="http://www.blogjava.net/spec-second/archive/2008/09/15/228949.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WAS中的Session跟踪机制</title><link>http://www.blogjava.net/spec-second/archive/2008/09/12/228589.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Fri, 12 Sep 2008 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/12/228589.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/228589.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/12/228589.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/228589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/228589.html</trackback:ping><description><![CDATA[<strong><span style="font-family: 方正姚体"><strong style="font-family: ">问题一：Session紊乱</strong></span><br />
</strong>按照servlet的规范，session id的cookie的名称应该为JSESSIONID，但这样可能出现如下问题，如果我一个浏览器访问了两个应用，应该有两个session存在，而且他们的session id肯定是不同的。因此可能出现的问题是：代表session id的cookie会互相覆盖，导致紊乱。在WAS中有个Session跟踪机制，可以为不同的Server设置不同的session id的cookie名，具体配置位置为：<br />
<span style="font-family: 方正姚体"><span style="color: #333399"><span style="font-family: 方正姚体"><strong>应用程序服务器 &gt; server1 &gt; 会话管理 &gt; Cookie &gt; </strong><label><strong>Cookie name<br />
</strong></label></span></span><br />
<strong>问题二、在线用户较多，内存占用大<br />
</strong><span style="font-family: 宋体">很多系统会有这个问题，默认session超时为30分钟，有很多用户登录以后，做了简单操作，然后直接关闭浏览器，导致有很多的&#8220;无效&#8221;session存在，而这些session所占用的内存，相当于垃圾，是变相的泄露。关于这个问题，WAS的解决方案是：限制在线session的最大值，如果超过最大值，则将最近最少使用的会话清除，具体配置位置为：<br />
</span><span style="font-family: 方正姚体"><span style="color: #333399"><span style="font-family: 方正姚体"><strong>应用程序服务器 &gt; server1 &gt; 会话管理 &gt; </strong></span></span></span><label><span style="color: #333399"><label><strong>内存中最大会话量</strong></label></span></label><br style="font-family: " />
</span><br />
<img src ="http://www.blogjava.net/spec-second/aggbug/228589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-12 14:46 <a href="http://www.blogjava.net/spec-second/archive/2008/09/12/228589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>建筑设计六个层次</title><link>http://www.blogjava.net/spec-second/archive/2008/09/10/228153.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Wed, 10 Sep 2008 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/10/228153.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/228153.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/10/228153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/228153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/228153.html</trackback:ping><description><![CDATA[<img alt="" src="http://www.blogjava.net/images/blogjava_net/spec-second/arch.jpg" height="114" width="328" /><br />
<ul>
    <li>site，地点，建筑所在物理地点，建筑用地的形状如何等；</li>
    <li>structure，结构，钢结构？混凝土结构？</li>
    <li>skin，外表，建筑的外观，时尚、技术革命、信仰等都会表现在这里；（20年发生变化）</li>
    <li>service，服务，建筑的内脏，例如，通信电缆、电源线、排水、供暖、煤气；电梯也属于这一行列；（7-15年变化？）</li>
    <li>space plan，空间规划，建筑内墙、天花板、地板门的分布；（看建筑用途，有些3年，有些30年变化）</li>
    <li>stuff，摆设，床、柜、电灯、电视等，随时都可能变化；</li>
</ul>
<br />
建筑设计师，最重要解决基本不变的东西，那就是structure，结构。<br />
<br />
<img src ="http://www.blogjava.net/spec-second/aggbug/228153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-10 15:08 <a href="http://www.blogjava.net/spec-second/archive/2008/09/10/228153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构模式</title><link>http://www.blogjava.net/spec-second/archive/2008/09/10/228147.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Wed, 10 Sep 2008 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/10/228147.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/228147.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/10/228147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/228147.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/228147.html</trackback:ping><description><![CDATA[常用的架构模式有：<br />
一、分层架构模式：<br />
按照抽象层次的高低划分，是系统纵向划分，每个层次纯粹为逻辑概念，与物理无关；该模式主要好处有：<br />
<ul>
    <li>每个层次可以独立进行变化，而互不影响；</li>
    <li>容易在不同层次接纳新技术与变化；</li>
</ul>
二、Facade架构模式：<br />
外部与一个子系统的通讯通过统一的门面进行，降低外部系统对内部实现的依赖性<br />
<br />
三、Mediator架构模式：<br />
包装一系列对象（系统）相互作用的方式，使得他们彼此不必互相了解，达到松耦合<br />
<br />
架构模式类型<br />
一、 From Mud to Structure型<br />
帮助架构师将系统合理划分，避免形成一个对象<span style="text-decoration: underline;">海洋</span>（A sea of <u><span style="text-decoration: underline;">objects</span></u>）。包括Layers（分层）模式、Blackboard（黑板）模式、Pipes/Filters（管道/<span style="text-decoration: underline;">过滤器</span>）模式等。<br />
<br />
二、分布系统（Distributed Systems）型<br />
为分布式系统提供完整的架构设计，包括像Broker（中介）模式等<br />
<br />
三、人机互动（Interactive Systems）型<br />
支持包含有人机互动介面的系统的架构设计，例子包括MVC（Model-View-Controller）模式、PAC（Presentation-Abstraction-Control）模式等<br />
<br />
四、Adaptable Systems型<br />
支持应用系统适应技术的变化、软件功能需求的变化。如Reflection（反射）模式、Microkernel（微核）模式等<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/spec-second/aggbug/228147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-10 14:45 <a href="http://www.blogjava.net/spec-second/archive/2008/09/10/228147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件的架构</title><link>http://www.blogjava.net/spec-second/archive/2008/09/10/228145.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Wed, 10 Sep 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/10/228145.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/228145.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/10/228145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/228145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/228145.html</trackback:ping><description><![CDATA[<strong>两个要素</strong>（元件划分和设计决定）：<br />
一、它是一个软件系统从整体到部分的最高层次的划分；<br />
二、建造一个系统所作出的最高层次的、以后难以更改的，商业的和技术的决定；<br />
<br />
<strong>架构的目标：<br />
</strong>一、可靠性（Reliable）<br />
二、安全行（Secure）<br />
三、可扩展性（Scalable）<br />
四、可定制化（Customizable）<br />
五、可扩展性（Extensible）<br />
六、可维护性（Maintainable）<br />
七、客户体验（Customer Experience）<br />
八、市场时机（Time to Market）<br />
<br />
<strong>架构的种类<br />
</strong>一、逻辑架构、软件系统中元件之间的关系；<br />
二、物理架构、软件元件是怎样放到硬件上的；<br />
三、系统架构、系统的非功能性特征；<br />
<img src ="http://www.blogjava.net/spec-second/aggbug/228145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-10 14:29 <a href="http://www.blogjava.net/spec-second/archive/2008/09/10/228145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebLogic JTA Error</title><link>http://www.blogjava.net/spec-second/archive/2008/09/09/227846.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Tue, 09 Sep 2008 00:43:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/09/09/227846.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/227846.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/09/09/227846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/227846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/227846.html</trackback:ping><description><![CDATA[如果两个不同domain下的WebLogic Server同名，在进行事务传播的时候会出现以下问题：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">@Transactional(readOnly&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">,&nbsp;propagation&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Propagation.REQUIRED)<br />
<br />
When&nbsp;the&nbsp;transaction&nbsp;attibutes&nbsp;are&nbsp;Required&nbsp;on&nbsp;both&nbsp;sides,<br />
I&nbsp;get&nbsp;the&nbsp;following&nbsp;error<br />
<br />
javax.transaction.TransactionRolledbackException:&nbsp;Current&nbsp;server&nbsp;is&nbsp;the&nbsp;coordinator&nbsp;and&nbsp;transaction&nbsp;is&nbsp;not&nbsp;found.&nbsp;It&nbsp;was&nbsp;probably&nbsp;rolled&nbsp;back&nbsp;and&nbsp;forgotten&nbsp;already.<br />
at&nbsp;weblogic.rjvm.ResponseImpl.unmarshalReturn(Respons&nbsp;eImpl.java:</span><span style="color: #000000;">195</span><span style="color: #000000;">)<br />
at&nbsp;weblogic.rmi.cluster.ClusterableRemoteRef.invoke(C&nbsp;lusterableRemoteRef.java:</span><span style="color: #000000;">338</span><span style="color: #000000;">)<br />
at&nbsp;weblogic.rmi.cluster.ClusterableRemoteRef.invoke(C&nbsp;lusterableRemoteRef.java:</span><span style="color: #000000;">252</span><span style="color: #000000;">)</span></div>
<br />
修改为不同Server名，则运行正常。<br />
具体原因，查找中。。。<br />
<br />
====================<br />
具体原因已经查明，参见了WebLogic的官方文档《Programming WebLogic JTA Release 10.0》第35页，关于跨Domain JTA事务的局限描述：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">The&nbsp;domains&nbsp;and&nbsp;all&nbsp;participating&nbsp;resources&nbsp;must&nbsp;have&nbsp;unique&nbsp;names.&nbsp;That&nbsp;is,&nbsp;you&nbsp;cannot&nbsp;<br />
have&nbsp;a&nbsp;JDBC&nbsp;data&nbsp;source,&nbsp;a&nbsp;server,&nbsp;or&nbsp;a&nbsp;domain&nbsp;with&nbsp;the&nbsp;same&nbsp;name&nbsp;as&nbsp;an&nbsp;object&nbsp;in&nbsp;another&nbsp;<br />
domain&nbsp;or&nbsp;the&nbsp;domain&nbsp;itself.</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/spec-second/aggbug/227846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-09-09 08:43 <a href="http://www.blogjava.net/spec-second/archive/2008/09/09/227846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBoss下CLOB.createTemporary抛出ClassCast的异常</title><link>http://www.blogjava.net/spec-second/archive/2008/08/26/224482.html</link><dc:creator>BigOnion</dc:creator><author>BigOnion</author><pubDate>Tue, 26 Aug 2008 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/spec-second/archive/2008/08/26/224482.html</guid><wfw:comment>http://www.blogjava.net/spec-second/comments/224482.html</wfw:comment><comments>http://www.blogjava.net/spec-second/archive/2008/08/26/224482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/spec-second/comments/commentRss/224482.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/spec-second/services/trackbacks/224482.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt"><span style="font-size: 12pt"><span style="font-family: Times New Roman"><span style="font-family: 宋体"><span style="font-family: Impact"><span style="font-family: Arial">错误用法：CLOB.createTemporary(conn,....);<br />
正确用法：CLOB.createTemporary(((WrappedConnection) con).getUnderlyingConnection() ,.....);<br />
原理：<br />
=================================================================<br />
if you are using jboss or any other AS that perform jdbc connection pooling , the classcast exception is caused by the "conn" object. (I had this problem using jboss4.0.1/oracle9.2).<br />
In jboss4 the Connection object retrieved by ConnectionFactory.makeconnection() is an instance of org.jboss.resource.adapter.jdbc.WrappedConnection class (or a DelegatingConnection in tomcat or products that use DBCP)<br />
=================================================================<br />
include jboss-common-jdbc-wrapper.jar with WrappedConnection class<br />
<br />
=============================《2008-9-10》=======================<br />
最近看了看人家Spring，老早处理了这种情况了，具体见NativeJdbcExtractor接口<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;NativeJdbcExtractor&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isNativeConnectionNecessaryForNativeStatements();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isNativeConnectionNecessaryForNativePreparedStatements();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;isNativeConnectionNecessaryForNativeCallableStatements();<br />
<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">呵呵，就是这个方法</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;getNativeConnection(Connection&nbsp;con)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;getNativeConnectionFromStatement(Statement&nbsp;stmt)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;getNativeStatement(Statement&nbsp;stmt)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;getNativePreparedStatement(PreparedStatement&nbsp;ps)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;CallableStatement&nbsp;getNativeCallableStatement(CallableStatement&nbsp;cs)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;getNativeResultSet(ResultSet&nbsp;rs)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException;<br />
<br />
}</span></div>
<br />
来看看，Jboss的特定实现：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;JBossNativeJdbcExtractor&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;NativeJdbcExtractorAdapter&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;WRAPPED_CONNECTION_NAME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.jboss.resource.adapter.jdbc.WrappedConnection</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;WRAPPED_STATEMENT_NAME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.jboss.resource.adapter.jdbc.WrappedStatement</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;WRAPPED_RESULT_SET_NAME&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.jboss.resource.adapter.jdbc.WrappedResultSet</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Class&nbsp;wrappedConnectionClass;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Class&nbsp;wrappedStatementClass;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Method&nbsp;getUnderlyingConnectionMethod;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Method&nbsp;getUnderlyingStatementMethod;<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;constructor&nbsp;retrieves&nbsp;JBoss&nbsp;JDBC&nbsp;wrapper&nbsp;classes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;so&nbsp;we&nbsp;can&nbsp;get&nbsp;the&nbsp;underlying&nbsp;vendor&nbsp;connection&nbsp;using&nbsp;reflection.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;JBossNativeJdbcExtractor()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.wrappedConnectionClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getClass().getClassLoader().loadClass(WRAPPED_CONNECTION_NAME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.wrappedStatementClass&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getClass().getClassLoader().loadClass(WRAPPED_STATEMENT_NAME);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getUnderlyingConnectionMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.wrappedConnectionClass.getMethod(</span><span style="color: #000000">"</span><span style="color: #000000">getUnderlyingConnection</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;(Class[])&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getUnderlyingStatementMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.wrappedStatementClass.getMethod(</span><span style="color: #000000">"</span><span style="color: #000000">getUnderlyingStatement</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;(Class[])&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;initialize&nbsp;JBossNativeJdbcExtractor&nbsp;because&nbsp;JBoss&nbsp;API&nbsp;classes&nbsp;are&nbsp;not&nbsp;available</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Retrieve&nbsp;the&nbsp;Connection&nbsp;via&nbsp;JBoss'&nbsp;&lt;code&gt;getUnderlyingConnection&lt;/code&gt;&nbsp;method.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;Connection&nbsp;doGetNativeConnection(Connection&nbsp;con)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">this</span><span style="color: #000000">.wrappedConnectionClass.isAssignableFrom(con.getClass()))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(Connection)&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getUnderlyingConnectionMethod.invoke(con,&nbsp;(Object[])&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(InvocationTargetException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">JBoss'&nbsp;getUnderlyingConnection&nbsp;method&nbsp;failed</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ex<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTargetException());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;access&nbsp;JBoss'&nbsp;getUnderlyingConnection&nbsp;method</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;con;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Retrieve&nbsp;the&nbsp;Connection&nbsp;via&nbsp;JBoss'&nbsp;&lt;code&gt;getUnderlyingStatement&lt;/code&gt;&nbsp;method.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Statement&nbsp;getNativeStatement(Statement&nbsp;stmt)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">this</span><span style="color: #000000">.wrappedStatementClass.isAssignableFrom(stmt.getClass()))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(Statement)&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.getUnderlyingStatementMethod.invoke(stmt,&nbsp;(Object[])&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(InvocationTargetException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">JBoss'&nbsp;getUnderlyingStatement&nbsp;method&nbsp;failed</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ex<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTargetException());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;access&nbsp;JBoss'&nbsp;getUnderlyingStatement&nbsp;method</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;stmt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Retrieve&nbsp;the&nbsp;Connection&nbsp;via&nbsp;JBoss'&nbsp;&lt;code&gt;getUnderlyingStatement&lt;/code&gt;&nbsp;method.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;PreparedStatement&nbsp;getNativePreparedStatement(PreparedStatement&nbsp;ps)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(PreparedStatement)&nbsp;getNativeStatement(ps);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Retrieve&nbsp;the&nbsp;Connection&nbsp;via&nbsp;JBoss'&nbsp;&lt;code&gt;getUnderlyingStatement&lt;/code&gt;&nbsp;method.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CallableStatement&nbsp;getNativeCallableStatement(CallableStatement&nbsp;cs)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(CallableStatement)&nbsp;getNativeStatement(cs);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Retrieve&nbsp;the&nbsp;Connection&nbsp;via&nbsp;JBoss'&nbsp;&lt;code&gt;getUnderlyingResultSet&lt;/code&gt;&nbsp;method.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;We&nbsp;access&nbsp;WrappedResultSet&nbsp;via&nbsp;direct&nbsp;reflection,&nbsp;since&nbsp;this&nbsp;class&nbsp;only<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;appeared&nbsp;in&nbsp;JBoss&nbsp;3.2.4&nbsp;and&nbsp;we&nbsp;want&nbsp;to&nbsp;stay&nbsp;compatible&nbsp;with&nbsp;at&nbsp;least&nbsp;3.2.2+.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ResultSet&nbsp;getNativeResultSet(ResultSet&nbsp;rs)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;SQLException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rs.getClass().getName().equals(WRAPPED_RESULT_SET_NAME))&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Method&nbsp;getUnderlyingResultSetMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;rs.getClass().getMethod(</span><span style="color: #000000">"</span><span style="color: #000000">getUnderlyingResultSet</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;(Class[])&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(ResultSet)&nbsp;getUnderlyingResultSetMethod.invoke(rs,&nbsp;(Object[])&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(InvocationTargetException&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">JBoss'&nbsp;getUnderlyingResultSet&nbsp;method&nbsp;failed</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ex<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getTargetException());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DASEntityRuntimeException(ExceptionConstant.DAS_14101034,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;access&nbsp;JBoss'&nbsp;getUnderlyingResultSet&nbsp;method</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}</span></div>
看来Spring中还是有不少经验总结的<br />
</span></span></span></span></span></span>
<img src ="http://www.blogjava.net/spec-second/aggbug/224482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/spec-second/" target="_blank">BigOnion</a> 2008-08-26 14:35 <a href="http://www.blogjava.net/spec-second/archive/2008/08/26/224482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>