<?xml version="1.0" encoding="gb2312" ?>
<rss version="2.0">
<channel>
<title>中间件</title>
<link>http://www.ltesting.nethttp://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/</link>
<description>测试开发技术 / 软件测试开发语言 / 中间件</description>
<language>zh-cn</language>
<item>
    <title><![CDATA[Logiscope测试机理[2]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0608/171885.html</link>
    <description><![CDATA[<P>　　Logiscope测试机理[2]&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　3.3 作用域的划分</P>
<P>　　我们在人工分析一个应用程序的代码时，通常先会查看应用程序的总体情况，然后分析应用程序中的各个类(对于使用<STRONG><A href="http://www.ltesting.net/html/74/category-catid-174.html" target="_blank" >面向对象</A></STRONG>这类语言实现的代码来说)，进而再分析类中的成员函数。</P>
<P>　　Audit在分析、显示对代码的审查结果时，也按这种形式进行划分，我们称它为作用域，比如对于C++、<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>语言实现的代码，Audit划分的作用域有：应用程序作用域、类作用域、函数作用域。通过它们的名字，你应该可以猜出各个作用域所包含的内容。应用程序作用域针对整个应用程序，类作用域针对系统中的各个类，函数作用域针对系统中的各个函数。</P>
<P>　　不同作用域之间是彼此独立的，但它们都是遵照我们前面提到的那个<STRONG><A href="http://www.ltesting.net/html/67/category-catid-167.html" target="_blank" >质量模型</A></STRONG>对代码进行分析。</P>
<P>　　3.4 Audit对代码的处理过程</P>
<P>　　对于使用Audit的用户来说，输入的是源程序代码，输出的是Audit的分析结果。Audit对代码的处理过程如图所示：</P>
<P>　　3.5 结束</P>
<P>　　好了，Audit的测试机理到此就介绍完了。</P>
<P>　　4 Rulechecker检测机理。</P>
<P>　　现在来介绍一下Logiscope为我们提供的另外一个工具——Rulechecker。Rulechecker也是一个静态<STRONG><A href="http://www.ltesting.net/html/2/category-catid-2.html" target="_blank" >测试工具</A></STRONG>。</P>
<P>　　先回想一下我们组织内部的编码规范。编码规范中会对程序代码的注释、变量命名、书写格式等各个方面做出规定，其目的，是为了让<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员书写的代码更健壮，可读性更好。Rulechecker这个工具也是为了协助我们实现使代码更健壮，可读性更好这个目的的。</P>
<P>　　Rulechecker实现了一个编码规范集。在这个规范集中的内容，与我们组织内部定义的编码规范的内容类似，但覆盖的范围要更广，规定的也更细(关于Rulechecker编码规范集中各条编码规范的详细内容，可以阅读我写的另一篇文章《RuleChecker编码规范》，在这里就不做描述了)。</P>
<P>　　在这个规范集中，有将近一半左右的编码规范，我们可以对其内容进行定制，这就大大增加了灵活性，使Rulechecker能更好的适应我们实际情况的需要。</P>
<P>　　在具体的<STRONG><A href="http://www.ltesting.net/html/97/category-catid-97.html" target="_blank" >测试过程</A></STRONG>中，Rulechecker的编码规范是如何发挥作用的呢?在我们为被测代码建立Rulechecker项目的过程中，有一步是让我们“Choose a configuration file”，这就是让我们选择一个编码规范描述文件，Rulechecker为我们提供了一个叫做‘RuleChecker.cfg’的编码规范描述文件，我们当然可以修改或重新编写一个.cfg文件，来适应我们的要求。</P>
<P>　　下面举Rulechecker编码规范集中一个编码规范的例子：Headercom编码规范</P>
<P>　　Headercom编码规范对代码文件的文件注释做出了规定，具体内容为：“每个代码文件的头部必须有文件注释，且注释要遵照一定的格式”。这个格式可由我们来设定。</P>
<P>　　我现在将Headercom规范要求的注释格式，设置成与我所在公司的编码规范中规定的文件注释相同的格式。 打开RuleChecker.cfg文件，用下面的内容代替文件Headercom原来的内容。</P>
<P>　　STANDARD Headercom ON</P>
<P>　　LIST "HEADER" "【文件名】"</P>
<P>　　"【功能模块和目的】"</P>
<P>　　"【主要函数及其功能】"</P>
<P>　　"【主要算法】"</P>
<P>　　"【接口说明】"</P>
<P>　　"【开发者及日期】"</P>
<P>　　"【版本】"</P>
<P>　　"【更改记录】" END LIST</P>
<P>]]></description>
    <pubDate>Tue, 08 Jun 2010 11:11:50 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[Logiscope测试机理[1]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0608/171884.html</link>
    <description><![CDATA[<P>　　Logiscope测试机理[1]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　1前言</P>
<P>　　本文介绍了静态<STRONG><A href="http://www.ltesting.net/html/2/category-catid-2.html" target="_blank" >测试工具</A></STRONG>Logiscope的测试机理。通过对Logiscope测试机理的了解，能帮助我们更好的使用这个工具。</P>
<P>　　通过阅读本文，你可以了解到以下信息：</P>
<P>　　◆Logiscope是如何分析软件产品质量的;</P>
<P>　　◆Logiscope是如何检测代码的编码规范的;</P>
<P>　　◆Logiscope是如何统计测试覆盖率的;</P>
<P>　　2 Logiscope总览</P>
<P>　　Logiscope有三项主要功能，以三个独立工具的形式出现，分别是：</P>
<P>　　软件质量分析工具——Audit;</P>
<P>　　代码规范性检测工具——Rulechecker;</P>
<P>　　测试覆盖率统计工具——TestChecker。</P>
<P>　　Audit和Rulechecker提供了对软件进行静态分析的功能，TestChecker提供了测试覆盖率统计的功能。</P>
<P>　　Logiscope可以对多种语言实现的代码进行分析，比如C、C++、<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>、Ada，等等。下面的内容与具体的语言基本是没有关系的，但如果某些地方确实要涉及具体的语言，则我都是以C++为例。</P>
<P>　　下面，我对Audit、Rulechecker和TestChecker的测试机理，分别进行介绍。</P>
<P>　　3 Audit测试机理;</P>
<P>　　3.1软件<STRONG><A href="http://www.ltesting.net/html/67/category-catid-167.html" target="_blank" >质量模型</A></STRONG></P>
<P>　　前面已经说过，Audit是审查程序代码质量的。要讨论代码的质量，就需要先说明一下软件质量模型的概念，因为理解下面的内容需要软件质量模型的相关<STRONG><A href="http://www.ltesting.net/ask/" target="_blank" >知识</A></STRONG>。</P>
<P>　　如果你原来学习过<STRONG><A href="http://www.ltesting.net/html/5/category-catid-5.html" target="_blank" >软件质量保证</A></STRONG>的相关知识，那么应该会对软件质量模型这个概念有印象。为了说明Audit的测试机理，在这里只对软件质量模型做个简单的介绍。如果你对软件质量模型的概念比较陌生，建议找一本讲述<STRONG><A href="http://www.ltesting.net/html/67/category-catid-167.html" target="_blank" >软件工程</A></STRONG>方面的书，阅读一下软件质量保证部分的内容。</P>
<P>　　软件质量模型是一个分层结构，它的一般形式如下图所示：</P>
<P>　　质量因素处于质量模型中最高一级。软件的质量因素包括功能性、<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >可靠性</A></STRONG>、易用性、效率、可维护性、可移植性这六个方面(在ISO/IEC 9126中有详细的描述)。</P>
<P>　　在质量因素之下，又细分成多个质量标准。</P>
<P>　　每个质量标准又由多个质量<STRONG><A href="http://www.ltesting.net/html/64/category-catid-164.html" target="_blank" >度量</A></STRONG>元组成。这些质量度量元处于质量模型分层结构中的最底层。</P>
<P>　　质量因素、质量标准一般是固定的，就是这几类，但质量度量元不是固定的，可以根据不同的情况发生变化。</P>
<P>　　软件质量模型就是一个将程序信息由底层到高层、由细节到概括的一个过程模型，它由简单、可测量的数据入手，最后分析概括出软件的特征。</P>
<P>　　3.2 Audit对软件质量模型的实现</P>
<P>　　上面我们了解了软件质量模型的大体结构，Audit也是按照这种分层、量化的方式来审查代码质量的。</P>
<P>]]></description>
    <pubDate>Tue, 08 Jun 2010 11:07:54 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[10]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0311/169757.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的性能调优[10]&nbsp;&nbsp;<STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　Read-mostly数据</P>
<P>　　也许最常见的情形是，数据被读取的频率大于其被更改的频率。这正是缓存可成功应用的场合。我建议使用启用了事务间缓存的乐观锁定。如果<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>模式可更改，我通常指定一个verify-columns的整型值，如果数据库模式不可更改，就指定一个Modified值。如果您决定使用一个版本列，那么要保证外部进程(如果有的话)在数据发生变更时遵守版本列更新的协定;否则，面临更新丢失的风险。</P>
<P>　　从选择适当的缓存大小方面来看，应该考虑多版本化，以及从finder方法返回的最大bean数目。一个不错的上限估计方法是将应用程序需要同时处理的最大事务数乘以单个事务可以处理的最大bean数。我通常建议使用更加灵活的应用程序级缓存，因为通常不太可能所有的CMP都同时被使用。应用程序缓存对于所有CMP来说是全局的，会自适应不同bean的活动。如果您定义了一个过大的应用程序级缓存，可能会损害性能，因为所有事务都会串行访问这个唯一的缓存。对于大小适当的缓存来说极少出现这个问题，但是同样，在您不确定缓存大小如何影响性能时应该进行<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能测试</A></STRONG>。顺便说一下，良好的设计实践是，避免创建返回任意多实体bean的finder方法(比如，大型表上的findAll())，因为这使得估计出适当的缓存大小变得几乎不可能。</P>
<P>　　带有事务间缓存的乐观并发最适合有缓存碰撞“保护”的<STRONG><A href="http://www.ltesting.net/html/94/category-catid-94.html" target="_blank" >用例</A></STRONG>。比如，在一个项目用例中，应用程序需要处理传入消息(来自JMS)。每个消息记录需要在数据库表中创建，然后必须发送另一个消息作为响应;对于第二个消息来说，应用程序希望在一分钟内收到响应，并且在收到该响应时，同一条数据库记录得到更新。这时在该场景中应用缓存会带来巨大和直接的性能收益。我们“保证”每个被缓存的项目至少有一个碰撞，如果缓存对于保存CMP实例来说过大的话。</P>
<P>　　另一个极端是目标表太大，以至于不可能对同一数据作出重复请求。从实践角度来看，这是不可行的，并且缓存这样的数据不能提高性能。</P>
<P>　　在上述的read-mostly模式中，乐观并发模式应该是更好的选择。read-mostly模式不能用于集群中，不能防止出现更新丢失，并且一般来说不便于使用。本文讲述它是为了提供关于所有可用策略的整体情况，但是我不鼓励在现代应用程序中使用它。</P>
<P>　　Read-mostly数据</P>
<P>　　如果您的应用程序主要是插入或更新记录，那么缓存数据意义不大，因为几乎不会再次访问它们。在只进行插入操作(OLTP)的极端情况下，缓存反而会减慢处理速度。非重复性更新(对表中远超过缓存大小的随机行的更新)也很少从CMP缓存中受益。此外，随着更新数目相对于读取次数的增加，乐观并发策略的表现越来越差，因为会出现大量的乐观并发异常。实际上，如果您的应用程序只在数据库中更新和插入记录，就根本没有必要使用实体bean。</P>
<P>　　结束语</P>
<P>　　从本文的长度就可以看出，调整CMP 2.0 EJB有很多内容。我首先讲述了可用的各种并发策略。然后讨论了一些重要的性能策略：read-mostly模式，事务间缓存，以及选择最佳缓存大小。最后，我提供了关于在何种情况下使用何种策略的指南。我希望这些分析能帮助你更好地理解EJB。</P>]]></description>
    <pubDate>Thu, 11 Mar 2010 10:12:35 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[9]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0311/169756.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[9]&nbsp;&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　应用程序级缓存</P>
<P>　　如果您的应用程序使用了很多实体bean，那么分析和配置各个bean的缓存会很麻烦。估计从“master-detail”关系的“detail”端返回的bean实例数尤为困难——比如，如果您的应用程序在“订单”表上执行一个finder操作，每个订单都有一个“项目”数可变的集合。另一个问题是由于每个实体bean都有一个单独的缓存，内存没有得到最有效的利用。认识到“每个bean一个缓存”模型的限制，WebLogic Server(从版本7开始)开始支持实体bean的应用程序级缓存。这使得同一个J2EE应用程序中的多个实体bean共享一个运行时缓存。</P>
<P>　　应用程序级缓存提供了下列好处：它减少了实体bean缓存的数目，从而减少了配置缓存的工作量。 它充分利用了内存和堆空间，因为减少了分段。比如，如果某一特定EJB经历了一次突发活动，它可以使用联合缓存中可用的所有内存，而使用该缓存的其他EJB都被换出。如果两个EJB使用不同的缓存，当一个bean的缓存满时，容器就不能将EJB换出到另一个bean的缓存中，导致了内存浪费。 它简化了管理;联合缓存使系统管理员只需调整单个缓存，而不是很多个缓存。 它提供了更好的可伸缩性。</P>
<P>　　为了定义应用程序级缓存，首先配置<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-application.xml中的entity-cache元素。然后在weblogic-ejb-jar.xml中引用entity-descriptor元素中entity-cache-ref元素中的应用程序级缓存。您可以定义一个缓存，然会将其用于应用程序中的所有实体bean，或者为bean组定义不同的缓存。也可以将应用程序级缓存与每个bean一个缓存混合使用，这样您就有很大的试验空间。我建议首先从被所有实体bean共享的应用程序级缓存开始，除非您有某些特殊<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。</P>
<P>　　使用应用程序级缓存是为每个bean指定一个缓存的可行的替代方法。可引用单个缓存的不同实体bean的数目或者已定义缓存的数目没有限制。可根据bean实例数(与每个bean一个缓存类似的方法)或者最大内存空间来指定缓存大小。从管理角度来看，使用内存的大小很有吸引力，但是要知道WebLogic Server不计算缓存中bean消耗的实际内存数(这可能是一项代价很高的操作);它只是根据weblogic-ejb-jar.xml部署描述符中规定的bean平均大小来分割内存。如果没有指定大小，则假定每个bean平均有100字节。我认为根据bean实例数指定缓存大小会更透明。</P>
<P>　　选择哪项策略?</P>
<P>　　本文已经讨论了很多内容，但是还未提及可应用于CMP bean的优化技术。比如，CMR缓存和字段组在某些环境下也很有用。选择最佳并发策略并充分利用长期缓存会给您的应用程序带来直接的性能提升。由于现在各个WebLogic Server版本中可用的选项有诸多不同(对于其他J2EE<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>也是如此)，所以有时候很难在某一具体情况下做出选择，尤其是如果<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员没有调整这些参数的经验的话。如果根本没有指定并发策略和缓存参数，WebLogic Server使用的默认设置从数据一致性方面考虑当然是不错的选择，但是从CMP bean的性能方面来看却不是最佳选择。没有放之四海皆准的东西，所以如果您不确定的话，应该分析您的<STRONG><A href="http://www.ltesting.net/html/94/category-catid-94.html" target="_blank" >用例</A></STRONG>，然后利用不同的并发设置进行测试，然后再作出最佳选择。接着，我会讨论一些基本用例以及它们的推荐设置。</P>
<P>　　静态只读数据</P>
<P>　　最可能的场景是，当<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>是静态(不随时间变化)、准静态(变化不频繁)，或者从应用程序的角度来看可当作静态或准静态，并且您的应用程序不修改这些数据时。比如，数据可能被外部进程频繁更新，但是如果您的应用程序只是每分钟/小时/天看到这些更新，那么就没问题。这种情况下，使用带有适当read-timeout-seconds值的只读并发策略是合乎逻辑的。如果您的应用程序需要按照某种预定时间间隔看到更新，或者有一个批处理过程来加载数据，而你需要马上看到新数据，那么就可以像前面描述的那样，显式地禁用缓存。比如，您可以在应用程序的正面暴露一个“CMP缓存失效服务”，然后在批处理的最后或者从调度程序中调用。这种情况下缓存大小很容易计算，因为需要该缓存的所有事务共享同一个CMP实例，所以不需要考虑多版本及其对缓存大小的影响。要根据表大小、单个对象大小以及可用内存选择合理的缓存大小。</P>]]></description>
    <pubDate>Thu, 11 Mar 2010 10:11:09 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[8]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0311/169755.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[8]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG>　</P>
<P>&nbsp;&nbsp;&nbsp; 　WebLogic Server 9.0中的改进</P>
<P>　　在WebLogic Server 9.0中，对使用乐观并发的缓存bean进行的显式缓存禁用被归档，并且与只读bean一致。(比如，bean home或远程主接口可被缓存到上面调用的CachingHome或CachingLocalHome和invalidate()方法中)。此外，read-timeout-seconds参数适用于用乐观并发部署的bean。<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员还对集群中的bean实例无效化有更多的控制。默认情况下，当在一个集群中部署具有乐观并发策略的bean，并且该集群的一个成员更新该bean时，WebLogic Server会试图使该集群的所有节点中的bean的所有副本无效。该无效化使您避免了乐观并发故障，但是会影响性能，因为它是一项资源密集型操作。可通过在<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-cmp-jar.xml中将cluster-invalidation-disabled设置为true来防止EJB容器使集群中的bean副本无效。</P>
<P>　　为实体Bean选择最佳缓存大小</P>
<P>　　既然您理解了事务间的缓存是如何工作的，下面就让我们讨论一下选择最佳缓存大小方面的重要话题。默认情况下，每个实体bean都定义有一个大小为1000的缓存。缓存大小由weblogic-ejb-jar.xml部署描述符中的max-beans-in-cache元素控制。我发现该名称有些令人误解，因为根据并发策略的不同，WebLogic Server保存无状态的实体bean实例池(采用<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>并发策略和排他性并发策略，且事务间缓存被禁止的情况下)或者(只读、乐观或排他性并发策略，且事务间缓存启用的情况下)保存具有保留字段值的bean的真正缓存，从而无需从数据库中重新加载bean的状态就可使用。后一种情况更有趣。有人可能会想，更改缓存大小只影响具有实体bean的操作的性能;缓存越大，在缓存中发现需要的特定实体bean实例的机会就越大。基本上是这样的，但是如我下面会讲到的那样，另一个重要因素会影响缓存大小的选择。</P>
<P>　　多版本化和事务的因素</P>
<P>　　确定实体bean缓存大小的推动因素之一(可能不太明显)是当事务使用实体bean时，它们在事务的执行期间被实际加载和“固定”在实体缓存中，即使调用者不在修改实体bean实例而仅是从中读取值。比如，想象一下，一个会话或MDB bean中的代码在一个实体bean “Person”上执行一个finder方法，然后在返回的集合上迭代。</P>
<P>　　...</P>
<P>　　Collection persons = personLocalHome.findSomething();</P>
<P>　　for (Iterator iter = persons.iterator(); iter.hasNext();) {</P>
<P>　　PersonLocal person = (PersonLocal)iter.next();</P>
<P>　　Long id = person.getId();</P>
<P>　　// do something: log, send email, etc</P>
<P>　　...</P>
<P>　　}</P>
<P>　　...</P>
<P>　　如果findSomething()方法返回比max-beans-in-cache中规定的值更多的对象，您的应用程序将在迭代器得到N+1个对象时(N为当前实体缓存大小)获得一个令人不愉快的(并且很可能是不想要的)CacheFullException。这可能看上去很重要，因为一般大家都认为finder不应返回很大的集合。但是不要忘记默认情况下WebLogic实体缓存是多版本的，这意味着如果多个事务请求同一个实体bean实例，那么会在缓存中创建多个版本(每个事务一个);从唯一对象的角度来看这可能极大地降低了缓存容量。</P>
<P>]]></description>
    <pubDate>Thu, 11 Mar 2010 10:09:26 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[7]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0311/169754.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的性能调优[7]&nbsp; <STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank>性能测试工具</A></STRONG>　</P>
<P>&nbsp; 　下面基于<STRONG><A href="http://www.ltesting.net/html/34/category-catid-434.html" target="_blank" >Cactus</A></STRONG>的测试验证了该行为。假定一个Person CMP bean是利用乐观并发部署的，并且cache-between-transaction被设置为true：</P>
<P>　　...</P>
<P>　　public class OptimisticLockingTest extends Servlet<STRONG><A href="http://www.ltesting.net/html/94/category-catid-94.html" target="_blank" >TestCase</A></STRONG> {</P>
<P>　　private UserTransaction tx;</P>
<P>　　protected void setUp() throws Exception {</P>
<P>　　super.setUp();</P>
<P>　　Context context = new InitialContext();</P>
<P>　　this.tx = (UserTransaction)context</P>
<P>　　.lookup("<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >java</A></STRONG>x/transaction/UserTransaction");</P>
<P>　　}</P>
<P>　　public void testCacheBetweenTransactions() throws Exception {</P>
<P>　　PersonLocalHome localHome = (PersonLocalHome)Locator</P>
<P>　　.getLocalHome(PersonLocalHome.JNDI_NAME);</P>
<P>　　// create record via CMP in first transaction</P>
<P>　　this.tx.begin();</P>
<P>　　PersonLocal local = localHome.create();</P>
<P>　　local.setName("John");</P>
<P>　　Long pk = local.getPrimaryKey();</P>
<P>　　this.tx.commit();</P>
<P>　　// update some field(s) via direct JDBC call in another</P>
<P>　　// transaction. Assume that updatePersonNameViaJdbc()</P>
<P>　　// method will update version column as well</P>
<P>　　String newName = "Paul";</P>
<P>　　this.tx.begin();</P>
<P>　　updatePersonNameViaJdbc(pk, newName);</P>
<P>　　this.tx.commit();</P>
<P>　　// find CMP again and try to update name in yet</P>
<P>　　// another transaction</P>
<P>]]></description>
    <pubDate>Thu, 11 Mar 2010 10:03:40 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[5]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0310/169746.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[5]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG>　</P>
<P>&nbsp;&nbsp; 　使用read-mostly模式</P>
<P>　　WebLogic Server通过将一个只读CMP bean和一个读写CMP bean映射到同一数据中为您提供了一个实现read-mostly模式的机制。您的应用程序应该用只读bean来读取数据，用读写bean来修改数据。只读bean按照上述部署描述符中read-timeout-seconds元素所指定的间隔从<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>中加载数据。为了保证只读bean总是返回当前数据，应该在读写bean更改数据时使只读bean无效。您可以通过在<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-ejb-jar.xml中的entity-descriptor小节的invalidation-target元素中指定该bean，来配置<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>，使其自动让相应的只读bean无效。这只能用于CMP 2.0实体bean。虽然该模式提供了缓存方面的好处，但是也有严重的不足。当使用该模式时，您应用程序中的大量实体bean将被有效地加倍，对应用程序的启动时间和内存造成影响。同样，<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员需要记住，只读和读写操作应该使用不同的bean，这经常会令人混淆。</P>
<P>　　值得一提的是，在旧版本的WebLogic Server中(没有对只读模式的通过invalidation-target的内在支持)，仍可以使用它。回忆一下前面讲过的，根据EJB规范，如果EJB抛出一个RuntimeException或者它的子类物，容器就应该销毁bean实例。因此，可以在实体bean的只读版本上暴露这样的destroyMe()方法，并从读写bean的ejbStore()方法中调用它。这就是著名的sepukku模式。</P>
<P>　　在读/写CMP bean的事务间缓存</P>
<P>　　另一种更先进的长期缓存的方法是通过将weblogic-ejb-jar.xml中的cache-between-transactions元素设置为true来配置bean。这种情况下，只有客户端首先引用该bean或者事务被回滚时WebLogic Server才会调用ejbLoad()来从数据库中加载数据。</P>
<P>　　尽管从理论上说，您可以对除数据库并发之外的所有并发策略使用该方法，但是在实践中，只有对乐观并发使用该方法才有意义。当应用于只读并发时，该设置被忽略，因为bean数据已经被缓存;当应用于排他性并发时，只有EJB具有对底层数据库的排他性访问时才起作用，而这是极少出现的情况。此外，当具有排他性并发的bean被部署在集群中时，WebLogic Server自动禁用事务间的缓存，因为集群中的任何服务器都可能更新bean数据，并且没有用来在节点间同步或禁用缓存值的机制。这使得我们在进行长期缓存时只有一种可行的并发策略：乐观并发。</P>
<P>　　如前所述，对于利用乐观并发策略部署的bean，WebLogic Server有一种内在机制，用来通过verify-columns检测底层数据变更。虽然乐观并发本身只能为数据库并发带来少量性能改善，但可利用事务功能间的缓存提供更大的改善。如果在EJB缓存中bean实例已经可用的话，将cache-between-transactions设置为true将使WebLogic Server忽略对数据库的调用。对于某些类型的应用程序(其中同一对象在短期内被不同事务多次访问)，这可能导致显著的性能改善(在某些环境下，最多百分之30到40)。自然地，既然我们使用的是乐观并发，您的应用程序必须做好在检测到并发冲突时处理OptimisticConcurrencyException的准备。当OptimisticConcurrencyException(RuntimeException的子类型)被抛出时，WebLogic Server 从缓存中丢弃一个EJB实例。注意，如果您将delay-updates-until-end-of-tx设置为true(默认)，除非事务承诺否则就得不到乐观异常，并且如果使用的是容器受控事务这将在应用程序代码之外。</P>
<P>　　与read-mostly模式(不提供通知集群中其他节点其中一个节点的数据发生变更的机制)相比，当具有乐观并发的bean被更新时，一个通知将被广播给其他集群成员，并且缓存bean实例将被丢弃，以避免乐观冲突。由于WebLogic Server不广播数据变更本身，而是只广播某些种类的bean标识符，这种跨集群的缓存无效措施在提高性能和<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>带宽利用率方面很有效。WebLogic Server自动完成这种缓存无效工作，bean开发人员不需要再做其他配置。当对同一个bean发出下一个请求时，新鲜的数据将被从数据库中加载。</P>]]></description>
    <pubDate>Wed, 10 Mar 2010 10:53:52 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[5]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0310/169745.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[5]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　使用read-mostly模式</P>
<P>　　WebLogic Server通过将一个只读CMP bean和一个读写CMP bean映射到同一数据中为您提供了一个实现read-mostly模式的机制。您的应用程序应该用只读bean来读取数据，用读写bean来修改数据。只读bean按照上述部署描述符中read-timeout-seconds元素所指定的间隔从<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>中加载数据。为了保证只读bean总是返回当前数据，应该在读写bean更改数据时使只读bean无效。您可以通过在<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-ejb-jar.xml中的entity-descriptor小节的invalidation-target元素中指定该bean，来配置<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>，使其自动让相应的只读bean无效。这只能用于CMP 2.0实体bean。虽然该模式提供了缓存方面的好处，但是也有严重的不足。当使用该模式时，您应用程序中的大量实体bean将被有效地加倍，对应用程序的启动时间和内存造成影响。同样，<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员需要记住，只读和读写操作应该使用不同的bean，这经常会令人混淆。</P>
<P>　　值得一提的是，在旧版本的WebLogic Server中(没有对只读模式的通过invalidation-target的内在支持)，仍可以使用它。回忆一下前面讲过的，根据EJB规范，如果EJB抛出一个RuntimeException或者它的子类物，容器就应该销毁bean实例。因此，可以在实体bean的只读版本上暴露这样的destroyMe()方法，并从读写bean的ejbStore()方法中调用它。这就是著名的sepukku模式。</P>
<P>　　在读/写CMP bean的事务间缓存</P>
<P>　　另一种更先进的长期缓存的方法是通过将weblogic-ejb-jar.xml中的cache-between-transactions元素设置为true来配置bean。这种情况下，只有客户端首先引用该bean或者事务被回滚时WebLogic Server才会调用ejbLoad()来从数据库中加载数据。</P>
<P>　　尽管从理论上说，您可以对除数据库并发之外的所有并发策略使用该方法，但是在实践中，只有对乐观并发使用该方法才有意义。当应用于只读并发时，该设置被忽略，因为bean数据已经被缓存;当应用于排他性并发时，只有EJB具有对底层数据库的排他性访问时才起作用，而这是极少出现的情况。此外，当具有排他性并发的bean被部署在集群中时，WebLogic Server自动禁用事务间的缓存，因为集群中的任何服务器都可能更新bean数据，并且没有用来在节点间同步或禁用缓存值的机制。这使得我们在进行长期缓存时只有一种可行的并发策略：乐观并发。</P>
<P>　　如前所述，对于利用乐观并发策略部署的bean，WebLogic Server有一种内在机制，用来通过verify-columns检测底层数据变更。虽然乐观并发本身只能为数据库并发带来少量性能改善，但可利用事务功能间的缓存提供更大的改善。如果在EJB缓存中bean实例已经可用的话，将cache-between-transactions设置为true将使WebLogic Server忽略对数据库的调用。对于某些类型的应用程序(其中同一对象在短期内被不同事务多次访问)，这可能导致显著的性能改善(在某些环境下，最多百分之30到40)。自然地，既然我们使用的是乐观并发，您的应用程序必须做好在检测到并发冲突时处理OptimisticConcurrencyException的准备。当OptimisticConcurrencyException(RuntimeException的子类型)被抛出时，WebLogic Server 从缓存中丢弃一个EJB实例。注意，如果您将delay-updates-until-end-of-tx设置为true(默认)，除非事务承诺否则就得不到乐观异常，并且如果使用的是容器受控事务这将在应用程序代码之外。</P>
<P>　　与read-mostly模式(不提供通知集群中其他节点其中一个节点的数据发生变更的机制)相比，当具有乐观并发的bean被更新时，一个通知将被广播给其他集群成员，并且缓存bean实例将被丢弃，以避免乐观冲突。由于WebLogic Server不广播数据变更本身，而是只广播某些种类的bean标识符，这种跨集群的缓存无效措施在提高性能和<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>带宽利用率方面很有效。WebLogic Server自动完成这种缓存无效工作，bean开发人员不需要再做其他配置。当对同一个bean发出下一个请求时，新鲜的数据将被从数据库中加载。</P>]]></description>
    <pubDate>Wed, 10 Mar 2010 10:49:50 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[4]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0310/169744.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的性能调优[4]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　只读并发</P>
<P>　　最后一个并发策略是read-only并发。如果<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>中的某些表包含很少或从未被更改过的数据，那么就很有必要将CMP bean声明为只读。<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>仍然为每个事务激活一个新的bean实例，所以请求是并行处理的;它不会每次都调用ejbLoad()，但是根据read-timeout-seconds参数的值周期性地调用。这为您的应用程序带来了显著的性能提升，因为<STRONG><A href="http://www.ltesting.net/html/18/category-catid-418.html" target="_blank" >SQL</A></STRONG>选择只进行一次(第一次访问实体bean时)，然后就被缓存起来，在后面的事务中重用。</P>
<P>　　WebLogic Server 8.1 SP2之前版本中的一个特殊功能是，即使bean被部署为只读，<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员仍然可以对该bean的实例进行create和remove操作。从8.1 SP2开始，这个功能在默认情况下已被禁用，但是如果您需要，可以通过在<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-cmp.jsr.xml中将allow-readonly-create-and-remove元素设置为true来打开它。</P>
<P>　　也有一种明确禁用只读实体bean的方法。该禁用操作强制在下一次事务开始时从数据库中刷新bean实例，即使读取时限还没过去。您可以将其看作冲洗实例缓存。可以使特定bean的一个特定实例，任何实例子集，或者给定bean的所有实例无效。要想调用invalidate()方法，您可能需要将bean的home或local home分别转换为CachingHome或CachingLocalHome。下面的代码说明了如何实现这一点：</P>
<P>　　Object o = context.lookup("MyBeanCMP");</P>
<P>　　// cast to CachinHome for remote interface or CachingLocalHome</P>
<P>　　// for local</P>
<P>　　CachingHome cachingHome = (CachingHome)o;</P>
<P>　　// invalidate particular instance by passing primary key value</P>
<P>　　cachingHome.invalidate(pk);</P>
<P>　　// invalidate any subset of bean instances by passing collections</P>
<P>　　// of primary keys</P>
<P>　　Collection pks = Array.asList(new Object[]{pk1, pk2, ...., pkN});</P>
<P>　　cachingHome.invalidate(pks);</P>
<P>　　// or invalidate all instances currently cached</P>
<P>　　cachingHome.invalidateAll();</P>
<P>　　当表中的数据准静态时(比如，如果它按照批处理过程每天更改一次)进行显式的无效操作很有用。这种情况下，您可以将相应的bean部署为只读，并且设置一个较大的读取超时值，然后，当批处理过程结束时，为这些实体bean调用invalidateAll()。</P>
<P>　　您可以通过在weblogic-ejb-jar.xml部署描述符中entity-cache一节中设置concurrency-strategy元素，为每个CMP bean指定一种并发策略。如果没有指定并发策略，WebLogic Server默认使用数据库并发。</P>
<P>　　性能改善策略</P>
<P>]]></description>
    <pubDate>Wed, 10 Mar 2010 10:48:35 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[3]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0310/169743.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的性能调优[3]&nbsp;&nbsp;<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank>性能测试工具</A></STRONG></P>
<P>　　乐观并发</P>
<P>　　乐观并发策略通过消除读取和更新操作之间<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>中的所有锁定解决了性能问题，同时还提供了检测更新丢失的机制。和数据库并发一样，乐观并发给每个事务一个自己的bean实例，但是它没有在事务进行过程中在EJB容器或数据库中包含任何锁。对于进行读锁定的数据库(非<STRONG><A href="http://www.ltesting.net/html/16/category-catid-416.html" target="_blank" >Oracle</A></STRONG>数据库)，容器在一个单独的事务(该事务在数据读取操作一完成就立即进行)中读取bean数据，从而避免了读取锁，并且提供了更高的可伸缩性。</P>
<P>　　这种更新丢失检测机制并不新鲜，在<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>创建之前就已经存在好长时间了。该模式的基本思想简单而强大：在更新时，首先进行检查，以确定表中的数据在被第一个进程读取之后是否被其他进程修改。实际中，这通常是通过在update语句的where子句中包含一个或多个额外的“版本”列来实现的。下面给出了一个简单的<STRONG><A href="http://www.ltesting.net/html/18/category-catid-418.html" target="_blank" >SQL</A></STRONG>的例子，其中version列是一个数值，在每次更新操作之后会递增：</P>
<P>　　-- at Entity load time"container executes select of bean fields,</P>
<P>　　-- plus 'version' field</P>
<P>　　select name, address, version from person where person_id = 1;</P>
<P>　　-- container remember value read from version column,</P>
<P>　　-- say it was 123</P>
<P>　　-- at update time, value of version which was read previously</P>
<P>　　-- added to the where clause and version incremented</P>
<P>　　update person set name='Joe', version = version + 1 where person_id = 1 and version = 123;</P>
<P>　　在进行更新时，容器通过执行以下代码能检测出数据库中实际上有多少行被更新： <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG>　　...</P>
<P>　　PreparedStatement ps =</P>
<P>　　connection.prepareStatement('update person...');</P>
<P>　　int rowsUpdated = ps.executeUpdate();</P>
<P>　　if (rowsUpdatated != 1) {</P>
<P>　　throw new OptimisticConcurrencyException('Data was modified by other process');</P>
<P>　　}</P>
<P>　　如您所见，该方法可使<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>避免更新丢失问题，并且不需要在容器或数据库中进行长期的锁定。该策略尤其适用于数据库中读取次数远多于更新次数，因此更新碰撞的几率很小时。通常，对于大部分应用程序来说是这样的。</P>
<P>　　一个用数字表示的版本列不是在WebLogic Server中实现乐观并发策略的唯一途径。相反可以使用一个时间戳列。(注意，数据库应该允许您存放足够精确的时间戳值)。时间戳的使用给您带来了额外好处，那就是知道记录的最后一次更新是什么时候。有时候在使用遗留数据库模式时，会不愿意或不可能更改数据表以添加一个版本列。这种情况下，WebLogic Server可以检查表中事务期间被读取的所有列(实体bean中的所有字段)，或者只检查被当前事务更新的列。乐观并发可用于遗留模式，无需对数据表进行任何修改，但是开销略微增加(意味着更复杂的SQL更新)。</P>]]></description>
    <pubDate>Wed, 10 Mar 2010 10:45:24 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[2]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0310/169742.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[2]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG></P>
<P>　　数据库并发</P>
<P>　　数据库并发策略是目前WebLogic Server版本中的默认并发策略。它提供了数据持久性和性能间的折中考虑。原理很简单：WebLogic Server并不自己管理锁，而是为每个试图访问该bean的每个事务创建一个新的bean实例，并将并发控制和死锁检测委派给底层数据库。这就像多个客户端对单个数据库进行并行数据库操作;数据库的隔离水平和锁定策略将规定哪些更新、选择和插入会进行，按照何种顺序，以及哪些(如果有的话)会失败。直接好处是该策略在集群环境中的良好适用性——只要集群中的所有节点共享一个数据库，EJB容器就不需要为数据同步细节而烦恼。</P>
<P>　　该策略明显比排他性策略更具伸缩性，并且对于某些应用程序效果尤为出众，但是也无法摆脱一些严重的性能限制。即使这样，容器仍保持了一个实体bean实例池，并且这些实例不包含事务间的任何中间状态。这是实例池化而不是缓存数据。池化无状态实例的整体思想可能来自于早期的JVM实现，那时对象创建还是一项很昂贵的操作，并且从性能的角度来看缓存对象实例是有好处的。在现代的JVM中情况并非如此，因为大部分情况下对象的创建非常快，但是由于该行为是EJB规范中描述的，所有供应商都应支持它。然而，当使用数据库并发策略时，容器从缓存中取出“无状态的”bean实例，并且必须执行一条<STRONG><A href="http://www.ltesting.net/html/18/category-catid-418.html" target="_blank" >SQL</A></STRONG>选择操作以获得最新数据并填充实例字段。</P>
<P>　　这种方法可能还不错，因为我们不用担心“不新鲜的”bean实例(当数据库中的数据被从同一集群中的另一个节点或者从不同应用程序中更新时)，但是性能也同样受到明显影响。您总是在每次事务的开始以一个额外的select操作结束，即使您只是打算更新bean中的数据而对之前的值并不感兴趣。因此，在主要或仅是执行更新或插入操作的应用程序中使用实体bean意义不大——容器可能花大量时间做不必要的选择操作，然后再抛弃数据。</P>
<P>　　排他性和数据库并发策略至少存在一个共同问题：更新丢失的可能性。可以想象两个客户端几乎同时更新映射到一个实体bean的表中的同一条记录。如果数据库中没有锁，先完成的更新操作的结果会被其次完成的更新所覆盖。这是否是可接受的结果取决于您的业务<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。更新丢失通常是不可接受或者不想要的;因此，应用程序需要某种机制来避免或检测更新丢失的情况，并且有机会恢复。当应用程序部署再多个节点上时使用排他性策略将不能控制更新丢失问题。但是如我之前所述，您不应再考虑该该策略。</P>
<P>　　数据库策略通过将并发控制委派给数据库，提供了进行读数据操作时在数据库中使用排他性锁的选择。这是通过将<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-cmp-jar.xml中的use-select-for-update元素设置为true(默认为false)来实现的。顾名思义，该动作告诉WebLogic Server在加载实体bean数据时使用“select for update”。生成的数据库锁一致存在，直到事务完成，因此其他事务不可能在第一个事务运行期间读取或更改数据。该项技术也许在“select for update”上组合了“no wait”选项，可能解决更新丢失问题以及任何可能的死锁——只不过代价很高。</P>
<P>　　该方法的一个缺点是性能会降低，因为一旦一个事务锁住一个实体实例，其他事务就不能访问同样的实体数据，即使它们需要的是只读访问。这基本上就是另一种排他性策略，唯一的区别是这次它可用于集群环境，因为所有的锁定都发生在(共享)数据库中而不是<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>实例上。第二个缺点是bean的行为在某种程度上依赖于底层数据库的锁策略实现。比如，有些数据库支持细粒度、行级的锁定，而有些则不然。在后一种情况中，对整个记录页的访问可能被作为单个实体加载操作的结果而被阻止。</P>]]></description>
    <pubDate>Wed, 10 Mar 2010 10:43:32 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优[1]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0310/169741.html</link>
    <description><![CDATA[<P>　　WebLogic Server中CMP实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[1]&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG>　</P>
<P>&nbsp; 　J2EE规范现在作为同时期企业项目的标准被广为接受。但是J2EE规范的一个重要部分即EJB持久性由于它的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>模型复杂并且实体bean的性能很差而长期受到批评。人们相信这样一个事实：如果实体bean(尤其是容器受控持久性实体bean，或者CMP)用于应用程序中，那么性能将受到影响。事实并非如此。</P>
<P>　　本文中我不打算解释EJB的复杂性。即将推出的EJB 3规范专门针对目标和开发模型，使得它更容易;该规范还提供依赖注入以及在实体bean容器之外的更容易的测试。相反，本文的目标在于提供BEA WebLogic Server 8.1和9.0中可用的高级选项的深度分析，使开发人员改善CMP bean的性能——在很多情况下可极大地改善。该主题很宽泛，不可能在一篇文章中一一涉及;因此，我只重点讨论CMP实体bean的并发以及长期缓存策略。我还简要说明了最新版本BEA WebLogic Server 9.0中的改进。</P>
<P>　　并发策略</P>
<P>　　J2EE开发人员知道EJB容器维护了一个实体bean缓存或者池，通常可在部署描述符中配置。令人惊奇的是，相当多的J2EE开发人员不知道这并不意味着一旦J2EE<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>从<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>中加载一个特定的bean实例，它就不再去数据库中寻找该实例，因为该实例已经保存在缓存池中了。相反，默认情况下J2EE服务器执行ejbLoad()在每次事务的开始从数据库中同步该实例的状态。基本上，CMP bean每运行一次(即使该bean在前一个事务中已经被加载)，服务器就执行一次<STRONG><A href="http://www.ltesting.net/html/18/category-catid-418.html" target="_blank" >SQL</A></STRONG> select语句来刷新它。只有在一个事务中操作多个实体bean实例时，服务器才会缓存它们。</P>
<P>　　显然，在每次事务中都重新从数据库中加载状态会造成很大的性能影响!这个默认行为很容易理解：如果数据库被多个进程共享，并且每个进程都可以改变数据库中持久对象的状态，那么这将是最<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>的方法。但是可以通过告诉J2EE服务器保留事务间实体bean的缓存实例，从而避免大部分时间里从数据库中刷新数据来略微改善这种情况。为了解决这个问题并生成一个最优的<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>，首先我将讨论BEA WebLogic Server中可用的不同的并发策略。</P>
<P>　　对于EJB开发人员来说很重要的一点是要知道实体bean中可用的不同并发策略。令人惊奇的是，有的开发人员甚至不知道并发选项的存在。那么适用于实体bean的并发策略是什么呢?EJB容器是一个高度多线程的应用程序，同时响应来自多个客户端的请求，这些请求通常会访问同一资源，比如数据表中的一行。因此，EJB容器应该管理对实体bean实例的并发访问;更加技术性地讲，并发策略决定了容器如何以及何时将实体bean的每个实例与底层数据库同步。</P>
<P>　　目前WebLogic Server中有四种可用的并发策略：排他、数据库、乐观和只读。默认情况下，从7.0版本开始，WebLogic Server就使用的是数据库并发。上面四种策略按性能从低到高依次排列。我将讨论每种策略的优缺点。</P>
<P>　　排他性并发</P>
<P>　　排他性并发意味着容器最多为每个主要键值创建一个实体bean实例(比如，表中的一行映射到容器中的一个EJB实例)。对指定实例的访问是串行的，并且请求是按照顺序逐个执行的。这种策略有一些严重的问题。首先，性能由于多个客户端对bean的串行访问受到明显影响，并且您不能再考虑应用程序的伸缩性。其次，EJB的单个实例(以及容器持有的关联锁)对于一个JVM(一个服务器实例)来说是本地的，不能在集群中工作。该策略只是用于后向兼容(早期版本的WebLogic Server默认使用它)，应该尽量不用。</P>]]></description>
    <pubDate>Wed, 10 Mar 2010 10:42:03 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[Weblogic服务器性能调优[3]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0205/169122.html</link>
    <description><![CDATA[<P>　　Weblogic<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG><STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[3]&nbsp;&nbsp;&nbsp;&nbsp;<A href="http://www.ltesting.net/" target=_blank><STRONG>软件<STRONG><A href="http://www.ltesting.net" target="_blank" >测试</A></STRONG></STRONG></A><STRONG>　</STRONG></P>
<P><STRONG>&nbsp;&nbsp; </STRONG>　7) 使用Webogic Server集群提高性能;</P>
<P>　　具体关于如何配置Weblogic集群，我就不细说了。详情可参考：Introduction to WebLogic Server Clustering。</P>
<P>　　8) Weblogic EJB调优</P>
<P>　　由于EJB2.0已经很少项目在用了，EJB3.0再成熟一点，我再补充这一部分吧!</P>
<P>　　9) JDBC应用调优</P>
<P>　　JDBC Connection Pool的调优受制于WebLogic Server线程数的设置和<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>进程数,游标的大小。通常我们在一个线程中使用一个连接,所以连接数并不是越多越好,为避免两边的资源消耗，建议设置连 接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销,将最小值和最大值设为一致。</P>
<P>　　增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮助,WebLogic能够为每一个连接缓存这些对象,此值默认为10。在保 证数据库游标大小足够的前提下,可以根据需要提高Statement Cache Size。比如当你设置连接数为25,Cache Size为10时,数据库可能需要打开25*10=250个游标。不幸的是,当遇到与PreparedStatement Cache有关的应用程序错误时,你需要将Cache Size设置为0。</P>
<P>　　尽管JDBC Connection Pool提供了很多高级参数,在<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>模式下比较有用,但大部分在生产环境下不需调整。这里建议最好不要设置测试表, 同时Test Reserved Connections和Test Released Connections也无需勾上。 当然如果你的数据库不稳定,时断时续,你就可能需要上述的参数打开。</P>
<P>　　最后提一下驱动程序类型的选择,以<STRONG><A href="http://www.ltesting.net/html/16/category-catid-416.html" target="_blank" >Oracle</A></STRONG>为例,Oracle提供thin驱动和oci驱动,从性能上来讲,oci驱动强于thin驱动,特别是大数 据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改进,这一弱势将得到弥补。而thin驱动的移植性明显强于oci驱动。所以 在通常情况下建议使用thin驱动。而最新驱动器由于WebLogic server/bin目录下的类包可能不是最新的,请以Oracle网站为准: http://www.oracle.com/technology ... va/sqlj_jdbc/h<STRONG><A href="http://www.ltesting.net/html/11/category-catid-111.html" target="_blank" >td</A></STRONG>ocs /jdbc9201.html。</P>
<P>　　10) JSP调优</P>
<P>　　* 设置jsp-param pageCheckSeconds=-1;</P>
<P>　　* 设置serlet-reload-check=-1或ServletReloadCheckSecs=-1;</P>
<P>　　* 设置jsp-param precompile=true，关闭JSP预编译选项。</P>]]></description>
    <pubDate>Fri, 05 Feb 2010 10:15:25 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[Weblogic服务器性能调优[2]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0205/169121.html</link>
    <description><![CDATA[<P>　　Weblogic服务器<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[2]&nbsp;&nbsp;<STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG>　</P>
<P>&nbsp;&nbsp; 　注：此值也可通过手动的修改config.xml配置文件。</P>
<P>　　4) 调优执行队列线程;</P>
<P>　　a) 修改默认执行线程数</P>
<P>　　在这里，执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好，应该恰到好处的去设置它，太小了，执行队列中将会积累很多待处理的任务，太大了，则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为25个执行线程。</P>
<P>　　为了设置理想的执行队列的线程数，我们可以启动管理控制台，在域(如：mydomain)&gt; 服务器 &gt; server实例(如：myserver)&gt; 监视 &gt; 性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数，据此确定理想的数值。</P>
<P>　　理想的默认执行线程数是由多方面的因素决定的，比如机器CPU性能、总体体系架构、I/O、操作系统的进程调度机制、JVM的线程调度机制。随着CPU个 数的增加，<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG>可以近乎线性地提高线程数。线程数越多，花费在线程切换的时间也就越多;线程数越小，CPU可能无法得到充分的利用。为获取一 个理想的线程数，需要经过反复的测试。在测试中，可以以25*CPU个数为基准进行调整。当空闲线程较少，CPU利用率较低时，可以适当增加线程数的大小 (每五个递增)。对于PC Server和<STRONG><A href="http://www.ltesting.net/html/75/category-catid-375.html" target="_blank" >Windows</A></STRONG> 2000，则最好每个CPU小于50个线程，以CPU利用率为90%左右为最佳。</P>
<P>　　通过启动管理控制台，在域(如：mydomain)&gt; 服务器 &gt; server实例(如：myserver)&gt; Execute Queue &gt; <STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>.kernel.Defalt &gt; 配置中修改线程计数。</P>
<P>　　b) 设定执行队列的溢出条件;</P>
<P>　　Weblogic Server提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能，当满足此溢出条件时，服务器改变其状态为“警告”状态，并且额外的再分配一些线程去处理在队列中的请求，而达到降低队列长度的目的。</P>
<P>　　通过启动管理控制台，在域(如：mydomain)&gt; 服务器 &gt; server实例(如：myserver)&gt; Execute Queue &gt; weblogic.kernel.Defalt &gt; 配置下面几项：</P>
<P>　　* 队列长度：此值表示执行队列中可容纳的最大请求数，默认值是65536，最后不要手动改变此值。</P>
<P>　　* 队列长度阈值百分比：此值表示溢出条件，在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。</P>
<P>　　* 线程数增加：当检测到溢出条件时，将增加到执行队列中的线程数量。如果CPU和内存不是足够的高，尽量不要改变默认值“0”。因为Weblogic一旦增加后不会自动缩减，虽然最终可能确实起到了降低请求的作用，但在将来的运行中将影响程序的性能。</P>
<P>　　* 最大线程数：为了防止创建过多的线程数量，可以通过设定最大的线程数进行控制。</P>
<P>　　在实际的应用场景中，应根据具体情况适当的调整以上参数。</P>
<P>　　c) 设定执行队列监测行为</P>
<P>　　Weblogic Server能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作，也无法再执行新请求。如果执行队列中的所有执 行线程都变为“阻塞”状态，Weblogic server可能改变状态为“警告”或“严重”状态。如果Weblogic server变为“严重”状态，可以通过Node Manager来自动关闭此服务器并重新启动它。具体请参考：Node Manager Capabilities文档。</P>
<P>　　通过启动管理控制台，在域(如：mydomain)&gt; 服务器 &gt; server实例(如：myserver)&gt;配置 &gt; 调整下可配置下面几项：</P>
<P>　　* 阻塞线程最长时间：在此服务器将线程诊断为阻塞线程之前，线程必须连续工作的时间长度(秒)。默认情况下，WebLogic Server 认为线程在连续工作 600 秒后成为阻塞线程。</P>
<P>]]></description>
    <pubDate>Fri, 05 Feb 2010 10:13:54 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[Weblogic服务器性能调优[1]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2010/0205/169120.html</link>
    <description><![CDATA[<P>　　Weblogic服务器<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>调优[1]&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/" target=_blank>软件测试</A></STRONG>　</P>
<P>&nbsp; 　注：在下面做的介绍都是以Weblogic8.1为例的，其它版本的Weblogic可能会有些许不同。</P>
<P>　　1) 设置JAVA参数;</P>
<P>　　a) 编辑Weblogic Server启动脚本文件;</P>
<P>　　* BEA_HOME\user_projects\domains\domain-name\start<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG>.cmd(startWebLogic.sh on <STRONG><A href="http://www.ltesting.net/html/76/category-catid-376.html" target="_blank" >Unix</A></STRONG>)</P>
<P>　　* BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)</P>
<P>　　b) 编辑set JAVA_OPTIONS命令，如：set JAVA_OPTIONS=-Xms256m –Xmx256m;</P>
<P>　　c) 保存，重启即可。</P>
<P>　　注：在WebLogic中，为了获得更好的性能，BEA公司推荐最小<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>堆等于最大Java堆。</P>
<P>　　2) 开发模式 vs. 产品模式;</P>
<P>　　开发模式和产品模式的一些参数的默认值不同，可能会对性能造成影响，下面是对性能有影响的参数列表：</P>
<P>　　参数</P>
<P>　　开发模式默认值</P>
<P>　　产品模式默认值</P>
<P>　　Execute Queue: Thread Count</P>
<P>　　15 threads</P>
<P>　　25 threads</P>
<P>　　JDBC Connection Pool: MaxCapacity</P>
<P>　　15 connnections</P>
<P>　　25 connections</P>
<P>　　3) 尽量开启本地I/O;</P>
<P>　　通过启动管理控制台，在域(如：mydomain)&gt; 服务器 &gt; server实例(如：myserver)&gt; 配置 &gt; 调整选择启用本地I/O。</P>]]></description>
    <pubDate>Fri, 05 Feb 2010 10:11:54 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[在WebLogic环境中考虑SOA]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2009/0827/165364.html</link>
    <description><![CDATA[在<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG>环境中考虑SOA&nbsp; <STRONG><A href="http://www.ltesting.net/html/73/category-catid-173.html" target=_blank>SOA架构</A></STRONG>
<P>关键字：<STRONG><A href="http://www.ltesting.net/html/73/category-catid-173.html" target="_blank" >soa</A></STRONG> 最近我在为一个客户工作，他们有许多部署在WebLogic 8.1上的J2EE应用程序，需要我帮助他们把应用程序资产转化为SOA的服务资产。他们有严格的时限，所以不能对应用程序代码进行大的改动。在讨论中，他们不断提出关于Web服务的问题，我感觉人们通常将Web服务看作SOA的构件块。他们关注的是将应用程序组件转化为Web服务以及由此给整体环境和操作带来的影响。 </P>
<P>&nbsp;&nbsp;&nbsp; 许多人将Web服务看作SOA基础架构的构件块，这并不奇怪。我认为Web服务可以是SOA的构件块，但并不一定是必需的。下面我将介绍为什么以及如何可以将部署在WebLogic Server上的应用程序组件看作作为SOA一部分的服务。</P>
<P>&nbsp;&nbsp; 应用程序可以被分解为实现业务功能的组件。每一个应用程序都有特定的业务、功能和操作<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。功能需求要迎合实现，在这方面我不准备花太多时间介绍，因为我们讨论的是已经成为企业一部分的、需要转化为SOA构件块的应用程序。此时我们需要关注的是，如何关联业务需求并为该应用程序提供一个轻松的操作环境。</P>
<P>&nbsp;&nbsp;&nbsp; 许多业务需求都归结为对应用程序的服务水平协议(SLA)的满足，业务需求可能包括以下方面:</P>
<P>&nbsp;&nbsp;&nbsp; 并发用户 <BR>&nbsp;&nbsp;&nbsp; 响应时间 <BR>&nbsp;&nbsp;&nbsp; 错误率 <BR>&nbsp;&nbsp;&nbsp; 工作负载优先化(业务功能按照优先级进行分解) <BR>&nbsp;&nbsp;&nbsp; 应用程序采用率(就用户数目而言的应用程序扩展路线图) <BR>&nbsp;&nbsp;&nbsp; 可用性 </P>
<P>&nbsp;&nbsp;&nbsp; 操作需求与维护基础架构有关，可能包括以下方面:</P>
<P>&nbsp;&nbsp;&nbsp; 应用程序监控 <BR>&nbsp;&nbsp;&nbsp; 部署策略 <BR>&nbsp;&nbsp;&nbsp; 维护(补丁、升级) <BR>&nbsp;&nbsp;&nbsp; 问题诊断 </P>
<P>&nbsp;&nbsp;&nbsp; 大多数情况下，WebLogic实例上部署了许多应用程序，难以将上述需求关联到该环境中。</P>
<P>&nbsp;&nbsp;&nbsp; 隔离:给出上述场景之后，我们来看一种将这样的环境转化为SOA的一部分的方法。第一步是要隔离被认为是关键型的应用程序或组件。可以通过将这些应用程序部署到各自的WebLogic实例中，然后关联适当的存储器和WebLogic资源到该应用程序来实现隔离。然后这些<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>实例可以被集群化，这样就有助于进行故障转移，从而使环境具有高度可用性。不要忘记:业务期望值越高，基础架构的成本就越昂贵。如果需要隔离应用程序的特定组件，可以利用定制的执行队列(Execute Queue)或工作管理器(Work Manager)(9.0中的新特性)，为它们配置适当的线程数。创建执行队列可以为应用程序组件提供分离的请求通道，并防止请求缺乏关键型业务功能。在连接池级进行隔离可以确保<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>资源的可用性。</P>
<P>&nbsp;&nbsp;&nbsp; 服务器特征:我们需要从吞吐量、负载之下的响应等方面来了解服务器特征。这是通过进行负载/压力<STRONG><A href="http://www.ltesting.net" target="_blank" >测试</A></STRONG>，然后调优环境以获得WebLogic Server实例的最佳<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能指标</A></STRONG>来完成的。这是一项重要的任务，因为它可以帮助规划以后的应用程序采用率，从而提供一个可伸缩的环境。</P>
<P>&nbsp;&nbsp;&nbsp; </P>
<P>]]></description>
    <pubDate>Thu, 27 Aug 2009 10:43:07 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[如何监控Tomcat服务器]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0629/164061.html</link>
    <description><![CDATA[在进行<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank>性能测试</A></STRONG>时，一般都需要对应用服务器进行监控，监控的指标包括应用服务器的JVM使用状况、可用连接数、队列长度等信息。商业的应用服务器如<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG>、<STRONG><A href="http://www.ltesting.net/html/46/category-catid-446.html" target="_blank" >WebSphere</A></STRONG>等都提供了Console对这些指标进行监控，在性能测试时可以很容易观察这些指标的情况。<BR><BR>　　Tomcat作为在国内得到广泛应用的J2EE服务器，在不少项目中都得到了使用。Tomcat小巧灵活、配置简单，非常适合小的WEB应用使用。但在对使用Tomcat的应用系统进行性能测试时，最头疼的问题就是不能获得应用服务器的相关<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能指标</A></STRONG>数据。<BR><BR>　　其实，从Tomcat 5.0开始，Tomcat就已经为自己提供了一个用于监控应用服务器性能指标的servelet —— status servelet。安装完Tomcat 5之后，通过访问 http://yourhost:port/manager/status 就可以获得当时的应用服务器监控数据。<BR><BR>　　当然，为了<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>起见，Tomcat 5在缺省安装时是不允许用户直接访问 http://yourhost:port/manager/status 的，访问的时候会给出一个403（forbidden）的错误信息。在Tomcat的Manual里说明了允许用户访问的方法：<BR><BR>&nbsp;&nbsp; 1. 转到Tomcat的安装目录下；<BR>&nbsp;&nbsp; 2. 修改conf/<STRONG><A href="http://www.ltesting.net/html/45/category-catid-445.html" target="_blank" >tomcat</A></STRONG>-users.xml文件，在其中加入一行&nbsp; &lt;user username="servermon" password="passwd" roles="manager"/&gt;<BR><BR>　　这样就可以在访问 http://yourhost:port/manager/status 时给出 servermon 的用户名与口令，查看到应用服务器的相关性能指标数据。<BR>]]></description>
    <pubDate>Mon, 29 Jun 2009 10:45:13 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[如何监控Tomcat服务器]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0625/163988.html</link>
    <description><![CDATA[在进行<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank>性能测试</A></STRONG>时，一般都需要对应用服务器进行监控，监控的指标包括应用服务器的JVM使用状况、可用连接数、队列长度等信息。商业的应用服务器如<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG>、<STRONG><A href="http://www.ltesting.net/html/46/category-catid-446.html" target="_blank" >WebSphere</A></STRONG>等都提供了Console对这些指标进行监控，在性能测试时可以很容易观察这些指标的情况。<BR><BR>　　Tomcat作为在国内得到广泛应用的J2EE服务器，在不少项目中都得到了使用。Tomcat小巧灵活、配置简单，非常适合小的WEB应用使用。但在对使用Tomcat的应用系统进行性能测试时，最头疼的问题就是不能获得应用服务器的相关<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能指标</A></STRONG>数据。<BR><BR>　　其实，从Tomcat 5.0开始，Tomcat就已经为自己提供了一个用于监控应用服务器性能指标的servelet —— status servelet。安装完Tomcat 5之后，通过访问 http://yourhost:port/manager/status 就可以获得当时的应用服务器监控数据。<BR><BR>　　当然，为了<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>起见，Tomcat 5在缺省安装时是不允许用户直接访问 http://yourhost:port/manager/status 的，访问的时候会给出一个403（forbidden）的错误信息。在Tomcat的Manual里说明了允许用户访问的方法：<BR><BR>&nbsp;&nbsp; 1. 转到Tomcat的安装目录下；<BR>&nbsp;&nbsp; 2. 修改conf/<STRONG><A href="http://www.ltesting.net/html/45/category-catid-445.html" target="_blank" >tomcat</A></STRONG>-users.xml文件，在其中加入一行&nbsp; &lt;user username="servermon" password="passwd" roles="manager"/&gt;<BR><BR>　　这样就可以在访问 http://yourhost:port/manager/status 时给出 servermon 的用户名与口令，查看到应用服务器的相关性能指标数据。<BR>]]></description>
    <pubDate>Thu, 25 Jun 2009 10:16:36 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[用apache配置TongWeb集群]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0624/163953.html</link>
    <description><![CDATA[<P><FONT size=2>一、Web集群的组成<BR>&nbsp;&nbsp;&nbsp; 一个<FONT color=#202859><STRONG><U>T</U></STRONG>ongWeb</FONT> Server集群包含有一定数量的TongWeb服务器、TongWebDirector 以及Web代理服务器。互相之间可以协作实现高负载，高可用性等功能。<BR>&nbsp;&nbsp;&nbsp; Web代理服务器（简称WebServer）：位于web客户端（浏览器）和TongWebDirector之间，可以是Microsoft IIS、<FONT color=#202859>Apache</FONT>、NetScape/iPlanet。主要用于提供静态页面（html，gif，jpeg）服务，对于servlet/jsp的调用，将会转给TongWeb Director。<BR>TongWeb Director：作为插件附加在Web代理服务器上。通过请求派发策略实现请求派发<FONT color=#202859>工作</FONT>和服务器失效检测工作。<BR>&nbsp;&nbsp;&nbsp; TongWeb 服务器(AppServer)：之间可以通过<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>实现对于http session数据的实时复制，从而保证客户端的高可靠访问。一台TongWeb服务器又称为一个集群节点。<BR>&nbsp;&nbsp;&nbsp; Web 应用：部署在TongWeb服务器上的，由 serlvet/jsp以及一些静态资源组成的应用程序，供浏览器访问使用。一个 web 应用，一般打包为一个 WAR 文件。</FONT></P>
<P><FONT size=2><IMG title=点击图片可在新窗口打开 style="WIDTH: 554px; CURSOR: pointer; HEIGHT: 234px" height=275 src="http://www.ltesting.net/uploads/2009/06/110593_200906241037501j7kE.jpg" width=585 border=0></FONT><BR><FONT size=2>&nbsp;&nbsp;&nbsp; Web代理服务器和TongWeb服务器启动的先后次序无关紧要，TongWebDirector将总是选择目前可用的TongWeb服务器，并周期性地检测TongWeb服务器是否正常工作。另外，还可以使用配置文件tongweb_director.conf来增加、删除或修改它所管理的TongWeb服务器。</FONT></P>
<P><BR><FONT size=2>二、Web集群的方式<BR>1、负载均衡<BR>&nbsp;&nbsp;&nbsp; 负载均衡是由多台服务器以对称的方式组成一个服务器集合，每台服务器都具有等价的地位，都可以单独对外提供服务而无须<U><STRONG><FONT color=#202859>其他</FONT></STRONG></U>服务器的辅助。TongWeb集群通过代理服务器上的TongWebDirector，将客户端发送来的请求均匀分配到多台内部Web服务器之一上，从而达到负载均衡的目的。而接收到请求的服务器独立地回应客户的请求。<BR>2、带会话迁移功能的应用级集群<BR>&nbsp;&nbsp;&nbsp; 带会话迁移功能的应用级集群就是在建立的负载均衡集群的基础上增加了Session保存与迁移功能。当Web应用中使用了Session时，集群中的每个TongWeb服务器管理自己所产生的Session，当Web应用从一台服务器迁移到另一台服务器时，Session也会自动进行迁移，这样使得对Session的管理被均匀地分布到所有的服务器上，任何一台服务器失效并不会使Session数据丢失。从而保证了Session应用的<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>性和<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >可靠性</A></STRONG>。</FONT></P>
<P><FONT size=2>三、在<STRONG><A href="http://www.ltesting.net/html/76/category-catid-376.html" target="_blank" >UNIX</A></STRONG>平台上用APACHE配置集群<BR>1、TongWebDirector for Apache 1.3的安装配置<BR>1.1 安装Apache Web Server<BR>apache安装在10.46.6.181的/opt/apache目录下，用<STRONG><A href="http://www.ltesting.net/html/02/category-catid-102.html" target="_blank" >boss</A></STRONG>用户进入起停。<BR>安装过程略（直接tar一个可用的就可以了）</FONT></P>
<P><FONT size=2>1.2 修改配置<BR>1）更改httpd.conf文件<BR>进入/usr/local/apache/conf，使用熟悉的编辑工具如vi打开httpd.conf文件，修改ServerName和Port为自己需要的配置。<BR>这里为了不影响大家原先的使用，所以将端口设置为9004</FONT></P>
<P><FONT size=2>1.3 装载模块状态检查<BR>为了后面能成功安装Apache上的TongWebDirector，必须确保mod_so能正常装载，因此需要检查模块是否装载，进入/usr/local/apache/bin，运行./httpd -l，查看是否有mod_so.c项，如果有就说明该正常装载了。</FONT></P>
<P><FONT size=2>2、安装TongWebDirector二进制代码模块<BR>2.1 安装所需二进制代码文件以及辅助文件列表<BR>&#1048698; Apache扩展模块文件： mod_tongweb_director.so<BR>该文件是一个Apache扩展模块。缺省应该放在Apache的libexec目录，并使用httpd.conf中的AddModule和LoadModule指令装载。</FONT></P>
<P><FONT size=2>&#1048698; TongWebDirector 配置文件： tongweb_director.conf<BR>该文件包含TongWebDirector配置。mod_tongweb_director.so模块缺省情况下在httpd.conf同一个目录中寻找该文件。</FONT></P>
<P><FONT size=2>&#1048698; TongWebDirector 守护程序文件: edir_daemon<BR>该程序运行在后台监视模块子实例使用的共享内存区域来协调负载平衡。在Apache中必须是因为它使用多个单独进程来允许并发请求的多线程性。该守护进程在Apache启动时自动启动，并在Apache停止时自动清除共享内存退出。</FONT></P>
<P><FONT size=2>&#1048698; TongWebDirector 状态工具： edir_status<BR>该实用程序直接读取TongWebDirector模块使用的共享内存区域，报告当前配置的每个应用和TongWeb服务器状态。<BR>Director二进制模块是平台相关的，存放在<TONGWEB-ROOT>/director/Apache目录中。</FONT></P><FONT size=2>
<P>]]></description>
    <pubDate>Wed, 24 Jun 2009 10:35:22 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[监控tomcat工具ManageEngine Applications]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0509/162575.html</link>
    <description><![CDATA[<P>&nbsp;ManageEngine Applications Manager提供了监视和管理J2EE底层结构、J2EE应用的<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>。它能监视Web<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>、<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>、应用服务器中的不同部件和这些部件所部署的系统。它提供了开放标准（如SNMP、JMX），保护了投资也方便了集成。其管理功能覆盖了管理方案中最重要的方面，即监视应用服务器的底层结构及部署在其中的应用的故障(健壮性)和<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>。它也可以用于管理定制的应用和其他服务器。如：<STRONG><A href="http://www.ltesting.net/html/16/category-catid-416.html" target="_blank" >Oracle</A></STRONG>数据库服务器、电子邮件服务器、文件服务器、搜索引擎、认证服务器等。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我经常用它来监控<STRONG><A href="http://www.ltesting.net/html/45/category-catid-445.html" target="_blank" >tomcat</A></STRONG>，其实这个工具的功能非常强大，可以监控到很多服务器、<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG>，</P>]]></description>
    <pubDate>Sat, 09 May 2009 23:05:54 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[在 WebSphere Application Server 中使用命令帮助简化管理脚本]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/websphe/2009/0504/162283.html</link>
    <description><![CDATA[<BLOCKQUOTE>命令帮助是一种在 Jython <STRONG><A href="http://www.ltesting.net/html/59/category-catid-159.html" target="_blank" >脚本语言</A></STRONG>中提供 wsadmin 命令的功能，用于在 IBM&reg; WebSphere&reg; Application Server V7 管理控制台中执行各种操作。本文提供一些使用场景，以帮助您充分利用此功能。本文提供的信息最适用于开始使用 wsadmin 和脚本进行中级体验的管理员。不熟悉命令帮助的人员可以学习如何使用，存储命令的历史记录并通过使用变量将这些命令一般化。</BLOCKQUOTE>
<P><SPAN class=atitle>引言</SPAN></P>
<P>在 IBM WebSphere Application Server V7 的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>过程中，可用性研究表明，命令帮助场景对用户至关重要，强调了对脚本的大量使用，并需要继续提供高<STRONG><A href="http://www.ltesting.net/html/5/category-catid-5.html" target="_blank" >质量</A></STRONG>的脚本工具和帮助。命令帮助是一种在 Jython 脚本语言中提供 wsadmin 命令的功能，用于在 WebSphere Application Server 管理控制台中执行各种操作。</P>
<P>命令帮助首先在 WebSphere Application Server V6.1 中使用，并对其提供了有限的支持，可以为大约 185 个任务提供命令。由于客户请求和对该功能的大量积极好评，在 V7 中增加了支持的范围和命令数量，支持数量提高到原来的四倍以上，可以支持 750 多个任务。</P>
<P>为用户提供了四个用于管理 WebSphere Application Server 环境的 wsadmin 对象：AdminConfig、AdminTask、AdminApp 和 AdminControl。在使用命令帮助之前，负责编写脚本的管理员常常需要参考各种资源来准确地确定他们需要操作的项目的脚本组件，其中包括适当的命令对象、语法和参数。在管理控制台中实施命令帮助之后，您（作为管理员）只需通过用户界面一次性完成任务，然后检索并保存生成的命令集。</P>
<P>为帮助您充分利用这些功能并从命令帮助中获得最大的价值，本文将通过一些使用场景介绍命令帮助的一些基础<STRONG><A href="http://www.ltesting.net/ask/" target="_blank" >知识</A></STRONG>，还将介绍一些方便您开展工作的具体功能。</P><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><IMG height=1 alt="" src="http://www.ltesting.net/uploads/2009/05/54376_2009050415075616N0r.gif" width="100%"><BR><IMG height=6 alt="" src="http://www.ltesting.net/uploads/2009/05/54376_200905041507562qLHT.gif" width=8 border=0></TD></TR></TBODY></TABLE>
<TABLE class=no-print cellSpacing=0 cellPadding=0 align=right>
<TBODY>
<TR align=right>
<TD><IMG height=4 alt="" src="http://www.ltesting.net/uploads/2009/05/54376_200905041507562qLHT.gif" width="100%"><BR>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=center><IMG height=16 alt="" src="http://www.ltesting.net/uploads/2009/05/54376_200905041507563FKv6.gif" width=16 border=0><BR></TD>
<TD vAlign=top align=right><B><FONT color=#5c81a7>回页首</FONT></B></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR>
<P><SPAN class=atitle>使用命令帮助</SPAN></P>
<P>命令帮助提供三种搜索命令的方法：</P>
<UL>
<LI><FONT color=#5c81a7>使用控制台生成命令。</FONT> 
<LI><FONT color=#5c81a7>使用日志维护历史记录。</FONT> 
<LI><FONT color=#5c81a7>将命令发送到脚本工具。</FONT> </LI></UL>
<P><SPAN class=smalltitle>使用控制台生成命令</SPAN></P>
<P>第一种方法是命令帮助的最基本用法。您启动管理控制台，执行某项操作，并访问命令帮助面板，其中显示该操作的 wsadmin 命令。</P>
<P>例如，假设您希望创建一个新的业务级应用程序。作为该应用程序的一部分，首先需要将应用程序文件导入资产存储库。可以将资产视为构成业务级应用程序的构造块；它表示物理二进制文件，并且是业务级应用程序体系结构中应用程序内容的最小管理单元。</P>
<P>要使用管理控制台导入资产，请按照下列步骤操作：</P>
<OL>
<LI>在左侧的导航菜单中展开 <B>Applications</B> 部分。 
<LI>选择 <B>New Application</B>，然后选择 <B>New Asset</B>。 
<LI>指定文件，完成所需的字段，然后单击 <B>Next</B>。图 1 显示了摘要面板。注意，命令帮助区域用红色圆圈标明。 <BR><BR><B>图 1. 管理控制台中的命令帮助</B><BR><IMG height=291 alt="图 1. 管理控制台中的命令帮助" src="http://www.ltesting.net/uploads/2009/05/54376_2009050415075641CPi.jpg" width=572> <BR><BR>
<LI>单击 <B>View administrative scripting command for last action</B> 启动命令帮助面板（图 2）。此面板显示了在 Jython 脚本语言中提供的用于导入资产的 wsadmin 脚本命令。现在您可以直接复制命令并将其粘贴到活动的 wsadmin 会话，或者粘贴到一个文件中以便以后修改和使用。当在 wsadmin 中运行这些命令时，请确保使用 Jython 从运行管理控制台的概要的 /bin 目录中启动了 wsadmin，如： 
<P><CODE><FONT face=NSimsun>C:\IBM\WebSphere\AppServerGM\profiles\Dmgr01\bin&gt; wsadmin -lang jython.</FONT></CODE> </P><BR><BR><B>图 2. 命令帮助 </B><BR><IMG height=215 alt="图 2. 命令帮助 " src="http://www.ltesting.net/uploads/2009/05/54376_2009050415075651reH.jpg" width=572> <BR><BR>
<P>图 2 还显示了命令帮助首选项：Enable command assistance notifications 和 Log command assistance commands。可以使用这些选项记录命令的历史记录，这将在下几节中详细介绍。</P></LI></OL>
<P>]]></description>
    <pubDate>Mon, 04 May 2009 15:07:26 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebSphere</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[Apache Tomcat Jboss 静态页面访问 性能比较]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0422/162032.html</link>
    <description><![CDATA[<P>Apache Tomcat Jboss 静态页面访问<STRONG><A href="http://www.ltesting.net/" target="_blank" >软件测试</A></STRONG><STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>比较</P>
<P><A href="http://www.ltesting.net/batch.download.php?aid=6387" target=_blank><IMG src="http://www.ltesting.net/uploads/2009/04/54376_2009042222114412r2A.jpg" border=0></A><BR>操作系统：<BR>&nbsp;&nbsp;&nbsp; Windows:<BR>&nbsp;&nbsp;&nbsp; Windows Server 2003, Enterprise Edition (5.2, Build 3790) Service Pack 2 (3790.srv03_sp2_gdr.070304-2240) _32bits<BR>&nbsp;&nbsp;&nbsp; Linux:<BR>&nbsp;&nbsp;&nbsp; CentOS release 5.2 (Final) /Linux 2.6.18-92.el5 #1 SMP Tue Jun 10 18:51:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux<BR><BR>硬件配置：<BR>&nbsp;&nbsp;&nbsp; 两台<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>配置相同，CPU:Xeon2.0×4 MEM:4G，其它配置略。<BR><BR>应用程序：<BR>apache:<BR>&nbsp;&nbsp;&nbsp; http://httpd.apache.org/download.cgi<BR>&nbsp;&nbsp;&nbsp; apache_2.2.11<BR>apache-tomcat:<BR>&nbsp;&nbsp;&nbsp; http://tomcat.apache.org/download-60.cgi<BR>&nbsp;&nbsp;&nbsp; apache-tomcat-6.0.18<BR>jboss:<BR>&nbsp;&nbsp;&nbsp; http://www.jboss.org/jbossas/downloads/<BR>&nbsp;&nbsp;&nbsp; JBoss-4.2.3.GA<BR><BR>访问静态HTML页面：<BR>&lt;html&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;head&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;html page&lt;/title&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/head&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;body&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;h1&gt;Hello World !&lt;/h1&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/body&gt;<BR>&lt;/html&gt;<BR><BR>测试脚本：<BR>TestMain(){<BR>&nbsp;&nbsp; web_reg_find("Fail=NotFound","Search=Body","Text=Hello World",LAST);<BR>&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/html/10/category-catid-110.html" target="_blank" >lr</A></STRONG>_start_transaction("default_htm");<BR>&nbsp;&nbsp; web_url("default.htm", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "URL=http://testserver:8080/default.htm", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Resource=0","RecContentType=text/html", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Referer=","Mode=HTML", LAST);<BR>&nbsp;&nbsp; lr_end_transaction("default_htm", <STRONG><A href="http://www.ltesting.net/html/10/category-catid-110.html" target="_blank" >LR</A></STRONG>_AUTO);<BR>}<BR><BR>应用程序使用默认配置。<BR>测试Windows使用10台机器40个虚拟用户，由于使用相同场景测试<STRONG><A href="http://www.ltesting.net/html/68/category-catid-468.html" target="_blank" >Linux系统</A></STRONG>点击率达不到最大值，测试时使用11台机55个虚拟用户。<BR><BR>最高点击率(hps) Apache Tomcat Jboss IIS Windows 6093 8304 8038 12660↑ Linux 11680&nbsp;↑ 12051↑ 11997&nbsp;↑ <BR>(“↑”表示点击率还有上升空间)<BR><BR>本想测试一下动态页面，但必须修改配置。用JSP页面小压了一下，内存溢出：<BR>Tomcat:<BR>&nbsp;&nbsp;&nbsp; Exception in thread "RMI TCP Connection(idle)" Exception in thread "RMI TCP Connection(idle)" <STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >java</A></STRONG>.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: Java heap space<BR>&nbsp;&nbsp;&nbsp; Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: Javaheap spaceException in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: Javaheap space<BR>Jboss:<BR>&nbsp;&nbsp;&nbsp; ERROR [[/]] Session event listener threw exception<BR>&nbsp;&nbsp;&nbsp; java.lang.OutOfMemoryError: Java heap space<BR>测试配置又是一个大工程，专门作个话题。<BR></P>]]></description>
    <pubDate>Wed, 22 Apr 2009 22:10:59 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[如何在Jconsole 监控 Jboss Tomcat]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0422/162031.html</link>
    <description><![CDATA[<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>在jdk5开始就自带有Jconsole了，要想用Jconsol监控且需要添加启动参数：<BR>Linux系统：<BR>JAVA_OPTS="$JAVA_OPTS <BR>&nbsp;&nbsp;&nbsp; -Dcom.sun.management.jmxremote.port=8950<BR>&nbsp;&nbsp;&nbsp; -Dcom.sun.management.jmxremote.authenticate=false <BR>&nbsp;&nbsp;&nbsp; -Dcom.sun.management.jmxremote.ssl=false"<BR>Windows系统也类似，去掉双引号，将环境变量符号$JAVA_OPTS 变成现在%JAVA_OPTS %即可。<BR><BR>这样就能在本机使用Jconsole监控了：jconsole localhost:8950。<BR><BR>要实现远程监控还要与IP绑定，添加参数：<BR>&nbsp;&nbsp;&nbsp; -D<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >java</A></STRONG>.rmi.server.hostname=192.168.10.31<BR><BR>&nbsp;&nbsp;&nbsp; 若要实现使用用户名登陆，修改参数-Dcom.sun.management.jmxremote.authenticate=true；<BR>&nbsp;&nbsp;&nbsp; 添加启动参数：-Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password ；<BR>然后进行以下配置：<BR>1. 把 JRE_HOME/lib/management/jmxremote.password.template拷贝为jmxremote.password。<BR>2. 去掉此目录下 jmxremote.a<STRONG><A href="http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/rational/<STRONG><A href="http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/rational/clearcase/" target="_blank" >clearcase</A></STRONG>/" target="_blank" >cc</A></STRONG>ess 最后两行的注释，这个存的就是用户名和权限。<BR>3. 对应的，去掉 jmxremote.password 最后两行注释，这个是用户名和对应的密码。<BR>4. 通过添加和修改这两个文件来管理登陆用户。<BR><BR>最后，要修改jmxremote.password文件的权限chkmod 600 jmxremote.password。<BR>&nbsp;&nbsp; 就可以在Jconsole里实现远程监控了：<BR>&nbsp;&nbsp; 远程进程 192.168.10.31:8950 <BR>&nbsp;&nbsp; 或 service:jmx:rmi:///jndi/rmi://192.168.10.31:8950/jmxrmi]]></description>
    <pubDate>Wed, 22 Apr 2009 22:09:34 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic性能调优：速度不是一切]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2009/0327/161440.html</link>
    <description><![CDATA[<P><STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target=_blank>WebLogic</A></STRONG>性能调优：速度不是一切　</P>
<P>追求原始速度的过程，会使可读性强的代码变得晦涩难懂（通常是无用的——目前的优化编译器相当不错），从而导致以后维护困难；而且在很多情况下，整体方案中的优化<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能指标</A></STRONG>无法吸引人们的兴趣。很多人只注重完成一次请求所需的时间——“这次交易仅用了20微秒就从储蓄帐户中取出500英镑，哇！” </P>
<P>　　对于事务型系统来说，系统的吞吐量通常远远要比一次请求的绝对速度更吸引人（尽管这么说，执行事务所需的时间还是必须满足某种限制条件）。吞吐量衡量系统在达到响应时间目标的情况下可以处理的工作量。当然了，系统中更多的客户端请求事务是产生更多工作的部分原因。此处的另一个有趣的因素是，响应时间和客户端数量不是独立的变量——抛给系统工作的客户端越多，单个事务就越有可能使用更长的时间。因此，（在给定的部署环境下）系统的最大吞吐量支配着多少个客户端可以以某个预期的速率提交事务，并将多少事务（比如说90%）的响应时间维持在要求的时限内。得出这个结论以后，在尝试预测生产设置以满足所需的服务水平并优化<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>资源的使用时，更改各种系统参数（执行线程数、<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>连接数、机器数等等）会不断地产生有趣的结果。</P>
<P>　　事实上，对于任何使用应用服务器的人来说，单个事务的个体往返时间对性能没有太大影响已经不是什么新鲜之谈了。很明显，优化的方式是尽可能地缩短客户端和该客户端所作用的后端之间的代码路径——而客户端和后端之间的应用服务器基础架构中的粘合层显然不利于缩短代码路径。但是，它却能提高吞吐量，这主要是通过在客户端中间共享稀有的服务器端资源（数据库连接、线程等等）而实现的。如果简单地通过缩短代码路径来提高性能，最终只会在客户端数目和服务器上所使用的资源之间建立一对一的关系；而一旦所有的服务器资源都被使用了，就会产生性能瓶颈，吞吐量也就无法进一步得到提升，除非可以整合更多的资源并共享出来。应用服务器的真正作用是，通过在客户端之间共享来节约服务器端所使用的资源数（代价是会产生较长的代码路径，这暗示着会或多或少地延长事务的往返时间），从而提高系统的最大可能吞吐量。从这方面来说，“我不使用事务，它们会降低速度”的说法是有道理的。</P>
<P>　　到目前为止，我们已经看到，系统要在有限的服务器资源下运行尽可能多的请求。但是没有说所有这些请求必须得到正确的结果——也就是说，任何独自执行的请求的结果应当与它与其他许多请求一起执行时所得到的结果一致（或者说，请求应当具有隔离性，当然了，隔离性(isolation)就是ACID中的“I”，而提供ACID属性的是事务）。因此，使用XA事务的代价是牺牲一点点绝对性能，而益处是得到正确的事务结果。如果您存款的<STRONG><A href="http://www.ltesting.net/html/01/category-catid-101.html" target="_blank" >银行</A></STRONG>使用XA，那么您就可以高枕无忧了，因为您知道，即使在某些模糊负载条件下从银行帐户中提款也不会出错！</P>
<P>　　这些讨论全都发生在数据层——XA完全是关于数据库事务的。每一个事务会将数据锁定在数据库中，直到事务完成；随后等待方才能看得到结果。当多个请求试图访问相同的数据时，事务就会引发瓶颈问题——除了第一个锁定争用数据的请求之外，其他请求都被阻塞或抛出，从而严重地影响了吞吐量，因为正在做的工作不会导致系统中有一个良好的事务流。</P>
<P>　　然而，数据库中的数据不是事务系统中唯一共享的资源。我已经讨论了应用服务器作为资源共享机制的作用——任一个资源都可能被争用；因此，如果多个请求同时访问，则应用服务器本身需要锁定内存中的数据结构以避免产生问题，而且这里也会产生争用。当然了，除应用服务器之外的各层也进行资源共享——在一个典型服务器中，为WebLogic配置的60个执行线程很可能至多在几个CPU中执行——当发生CPU争用时，那些不走运的线程就必须在队列中等待，直到某个CPU空闲；内存或者硬盘也是如此。</P>
<P>　　总之，到目前为止我所提到的都是大问题——<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能测试</A></STRONG>的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>、完成所有调优后测试的运行、满足预期要求的服务器资源分配，这些都随着不断变化的应用程序版本和服务器环境版本而反复进行，产生的特定系统必须承受得起不可预知的实际负载。这些不只是难题，也是每一个应用程序生命周期成本的主要部分。</P>
<P>　　聪明的读者会注意到我的电子邮件地址已经变更；这是因为我已经加入了Azul Systems，该公司有应对上述问题的独特<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>。<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>是多线程的，因此可以提供包含多个CPU且每个CPU都具有多个内核的系统；这些Java线程实际上就产生了并行化；其次，它提供对同步Java对象的乐观锁定的支持，以减少Java软件层中的争用；再次，它提供可以在多个应用程序之间共享的内存池。总而言之，Azul Appliance提供了一种Java执行引擎，它通过为单个应用程序提供大量的CPU和内存资源，从而试图缓解传统虚拟机环境中由于CPU或内存不足而产生的瓶颈，从而降低了系统使用的资源量。</P>
<P>　　该策略还有另外一个优点，即它在一定程度上避免了基于每个应用程序进行调优的需要，这是因为设备提供的资源非常多，以至于可以轻松地在多个应用程序之间共享；而以前，每一个应用程序都需要在自己的服务器上为<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>峰值预留一定的空间。这种共享是可以实现的，因为总的来说，需求峰值是平滑的（因为很多不相关的应用程序同时达到需求峰值的情况不大可能发生）；因此，需求可以通过池化的资源得到满足，从而使您既不用担心应用程序级的大小（以及相关成本），也不用担心每个应用程序基础上的硬件过量供应。这预示着一个以低成本采购和管理的设备来运行高性能Java应用程序的新时代来临了。</P>]]></description>
    <pubDate>Fri, 27 Mar 2009 09:12:39 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优（二）]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2009/0326/161422.html</link>
    <description><![CDATA[　在读/写CMP bean的事务间缓存 
<P>　　另一种更先进的长期缓存的方法是通过将<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-ejb-jar.xml中的cache-between-transactions元素设置为&nbsp; true来配置bean。这种情况下，只有客户端首先引用该bean或者事务被回滚时<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target=_blank>WebLogic</A></STRONG>&nbsp; Server才会调用ejbLoad()来从<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>中加载数据。</P>
<P>　　尽管从理论上说，您可以对除数据库并发之外的所有并发策略使用该方法，但是在实践中，只有对乐观并发使用该方法才有意义。当应用于只读并发时，该设置被忽&nbsp; 略，因为bean数据已经被缓存；当应用于排他性并发时，只有EJB具有对底层数据库的排他性访问时才起作用，而这是极少出现的情况。此外，当具有排他性&nbsp; 并发的bean被部署在集群中时，WebLogic&nbsp; Server自动禁用事务间的缓存，因为集群中的任何<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>都可能更新bean数据，并且没有用来在节点间同步或禁用缓存值的机制。这使得我们在进行长期&nbsp; 缓存时只有一种可行的并发策略：乐观并发。</P>
<P>　　如前所述，对于利用乐观并发策略部署的bean，WebLogic&nbsp; Server有一种内在机制，用来通过verify-columns检测底层数据变更。虽然乐观并发本身只能为数据库并发带来少量<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>改善，但可利用事务&nbsp; 功能间的缓存提供更大的改善。如果在EJB缓存中bean实例已经可用的话，将cache-between-transactions设置为true将使&nbsp; WebLogic&nbsp; Server忽略对数据库的调用。对于某些类型的应用程序（其中同一对象在短期内被不同事务多次访问），这可能导致显著的性能改善（在某些环境下，最多百&nbsp; 分之30到40）。自然地，既然我们使用的是乐观并发，您的应用程序必须做好在检测到并发冲突时处理&nbsp; OptimisticConcurrencyException的准备。当&nbsp; OptimisticConcurrencyException（RuntimeException的子类型）被抛出时，WebLogic&nbsp; Server&nbsp; 从缓存中丢弃一个EJB实例。注意，如果您将delay-updates-until-end-of-tx设置为true（默认），除非事务承诺否则就得&nbsp; 不到乐观异常，并且如果使用的是容器受控事务这将在应用程序代码之外。</P>
<P>　　与read-mostly模式（不提供通知集群中其他节点其中一个节点的数据发生变更的机制）相比，当具有乐观并发的bean被更新时，一个通知将被广播&nbsp; 给其他集群成员，并且缓存bean实例将被丢弃，以避免乐观冲突。由于WebLogic&nbsp; Server不广播数据变更本身，而是只广播某些种类的bean标识符，这种跨集群的缓存无效措施在提高性能和<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>带宽利用率方面很有效。&nbsp; WebLogic&nbsp; Server自动完成这种缓存无效工作，bean<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>人员不需要再做其他配置。当对同一个bean发出下一个请求时，新鲜的数据将被从数据库中加载。</P>
<P>　　If the data in the database is updated by processes external to the&nbsp; server (or if you're using direct JDBC a<STRONG><A href="http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/rational/<STRONG><A href="http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/rational/clearcase/" target="_blank" >clearcase</A></STRONG>/" target="_blank" >cc</A></STRONG>ess from the server to modify&nbsp; the same tables as mapped to CMPs with long-term caching), then these&nbsp; processes should honor the contract on version columns. 换言之，如果实体bean被配置为使用数值版本列，那么外部进程应该在行数据更新时增加该值；如果使用了一个时间戳列，那么这个值应该被&nbsp; 更新为当前时间戳。如果不这样做会导致WebLogic&nbsp; Server覆盖数据，因为它的乐观检测机制不会触发异常，如果版本数据没有被更改的话。如果不可能通过修改外部进程来更新版本列，可用数据库触发器来实&nbsp; 现同样效果。如果不允许修改数据库模式，可对WebLogic&nbsp; Server进行配置，使其检查事务期间被读取的所有列或者只读取更新过的列（通过分别将verify-columns元素设置为Read或&nbsp; Modified来实现）。注意，这种情况下，可能存在性能问题，因为生成的更新<STRONG><A href="http://www.ltesting.net/html/18/category-catid-418.html" target="_blank" >SQL</A></STRONG>语句更复杂。我建议进行<STRONG><A href="http://www.ltesting.net/" target="_blank" >测试</A></STRONG>，以确定这会对您具体环境中的更新造成&nbsp; 多大影响。</P>
<P>　　在事务间进行缓存提供了比上面讨论过的read-mostly模式更好的缓存数据模型。首先，并没有增加复杂度，比如部署同一bean的两个版本。另外，&nbsp; 对启动时间，以及当集群间bean发生变更时的自动缓存禁用等也没有造成影响。直到最近，WebLogic&nbsp; Server中与事务bean间缓存相关的一项特性还被忽视。没有公开的机制来有计划地使bean缓存无效。如果您对服务器上数据库进行排他性访问，这没&nbsp; 有什么大问题，但是在很多项目中，很少有这种情况，并且为了清空缓存，必须重启实例；同样，这也并不总是可能的。</P>
<P>　　让我们看一下如果一个bean用乐观并发部署并且当数据库中的数据被外部进程更新时被在事务间缓存，这时会发生什么。如果一个外部进程更新当前被容器缓存&nbsp; 的记录，然后应用程序通过CMP更新同样的列，那么会有两种可能的结果：如果外部进程在更新verify-columns时不遵守协定，那么就会出现更新&nbsp; 丢失的情况（来自CMP的更新覆盖外部进程对记录进行的修改）。另一方面，如果外部进程更新了版本列，或者bean被配置，以便用&nbsp; Read/Modified列进行乐观控制，您就可能有一个OptimisticConcurrencyException。</P>
<P>　　在WebLogic&nbsp; Server中，OptimisticConcurrencyException是RuntimeException的一个子类，并且如果应用程序没有捕&nbsp; 获它，实体实例（以及调用同一事务中该实体的所有会话bean）就被丢弃，事务就被回滚；下一次，WebLogic&nbsp; Server会从数据库中重新加载数据，并且事务会成功完成。尽管缺乏“美感”，但这种方法对于使用队列（MOM）的应用程序来说还是很有效的；在事务回&nbsp; 滚时，该消息将保留在队列中，接着下一个重新交付尝试（如果有的话）会成功。值得再次一提的是，除非您的应用程序使用bean受控事务，否则您将捕获不到&nbsp; OptimisticConcurrencyException，除非将delay-updates-until-end-of-tx设为false（非&nbsp; 默认值）。利用默认设置，WebLogic&nbsp; Server不能在数据库中执行实际的DML操作，并且操作会以RollbackException（它内部就是提到过的真正的&nbsp; OptimisticConcurrencyException）异常而失败。</P><BR>]]></description>
    <pubDate>Thu, 26 Mar 2009 11:03:22 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic Server中CMP实体bean的性能调优（一）]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2009/0326/161421.html</link>
    <description><![CDATA[J2EE规范现在作为同时期企业项目的标准被广为接受。但是J2EE规范的一个重要部分即EJB持久性由于它的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>模型复杂并且实体bean的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>很差而长期受到批评。人们相信这样一个事实：如果实体bean（尤其是容器受控持久性实体bean，或者CMP）用于应用程序中，那么性能将受到影响。事实并非如此。 
<P>　　本文中我不打算解释EJB的复杂性。即将推出的EJB 3规范专门针对目标和开发模型，使得它更容易；该规范还提供依赖注入以及在实体bean容器之外的更容易的<STRONG><A href="http://www.ltesting.net/" target="_blank" >测试</A></STRONG>。相反，本文的目标在于提供BEA <STRONG><A href="http://www.ltesting.net/html/26/n-161426.html" target=_blank>WebLogic</A></STRONG> Server 8.1和9.0中可用的高级选项的深度分析，使开发人员改善CMP bean的性能——在很多情况下可极大地改善。该主题很宽泛，不可能在一篇文章中一一涉及；因此，我只重点讨论CMP实体bean的并发以及长期缓存策略。我还简要说明了最新版本BEA WebLogic Server 9.0中的改进。</P>
<P>　　并发策略</P>
<P>　　J2EE开发人员知道EJB容器维护了一个实体bean缓存或者池，通常可在部署描述符中配置。令人惊奇的是，相当多的J2EE开发人员不知道这并不意味着一旦J2EE<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>从数据库中加载一个特定的bean实例，它就不再去数据库中寻找该实例，因为该实例已经保存在缓存池中了。相反，默认情况下J2EE服务器执行ejbLoad()在每次事务的开始从数据库中同步该实例的状态。基本上，CMP bean每运行一次（即使该bean在前一个事务中已经被加载），服务器就执行一次<STRONG><A href="http://www.ltesting.net/html/18/category-catid-418.html" target="_blank" >SQL</A></STRONG> select语句来刷新它。只有在一个事务中操作多个实体bean实例时，服务器才会缓存它们。</P>
<P>　　显然，在每次事务中都重新从数据库中加载状态会造成很大的性能影响！这个默认行为很容易理解：如果数据库被多个进程共享，并且每个进程都可以改变数据库中持久对象的状态，那么这将是最<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>的方法。但是可以通过告诉J2EE服务器保留事务间实体bean的缓存实例，从而避免大部分时间里从数据库中刷新数据来略微改善这种情况。为了解决这个问题并生成一个最优的<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>，首先我将讨论BEA WebLogic Server中可用的不同的并发策略。</P>
<P>　　对于EJB开发人员来说很重要的一点是要知道实体bean中可用的不同并发策略。令人惊奇的是，有的开发人员甚至不知道并发选项的存在。那么适用于实体bean的并发策略是什么呢？EJB容器是一个高度多线程的应用程序，同时响应来自多个客户端的请求，这些请求通常会访问同一资源，比如数据表中的一行。因此，EJB容器应该管理对实体bean实例的并发访问；更加技术性地讲，并发策略决定了容器如何以及何时将实体bean的每个实例与底层数据库同步。</P>
<P>　　目前WebLogic Server中有四种可用的并发策略：排他、数据库、乐观和只读。默认情况下，从7.0版本开始，WebLogic Server就使用的是数据库并发。上面四种策略按性能从低到高依次排列。我将讨论每种策略的优缺点。</P>
<P>　　排他性并发</P>
<P>　　排他性并发意味着容器最多为每个主要键值创建一个实体bean实例（比如，表中的一行映射到容器中的一个EJB实例）。对指定实例的访问是串行的，并且请求是按照顺序逐个执行的。这种策略有一些严重的问题。首先，性能由于多个客户端对bean的串行访问受到明显影响，并且您不能再考虑应用程序的伸缩性。其次，EJB的单个实例（以及容器持有的关联锁）对于一个JVM（一个服务器实例）来说是本地的，不能在集群中工作。该策略只是用于后向兼容（早期版本的WebLogic Server默认使用它），应该尽量不用。</P>
<P>　　数据库并发</P>
<P>　　数据库并发策略是目前WebLogic Server版本中的默认并发策略。它提供了数据持久性和性能间的折中考虑。原理很简单：WebLogic Server并不自己管理锁，而是为每个试图访问该bean的每个事务创建一个新的bean实例，并将并发控制和死锁检测委派给底层数据库。这就像多个客户端对单个数据库进行并行数据库操作；数据库的隔离水平和锁定策略将规定哪些更新、选择和插入会进行，按照何种顺序，以及哪些（如果有的话）会失败。直接好处是该策略在集群环境中的良好适用性——只要集群中的所有节点共享一个数据库，EJB容器就不需要为数据同步细节而烦恼。</P>
<P>　　该策略明显比排他性策略更具伸缩性，并且对于某些应用程序效果尤为出众，但是也无法摆脱一些严重的性能限制。即使这样，容器仍保持了一个实体bean实例池，并且这些实例不包含事务间的任何中间状态。这是实例池化而不是缓存数据。池化无状态实例的整体思想可能来自于早期的JVM实现，那时对象创建还是一项很昂贵的操作，并且从性能的角度来看缓存对象实例是有好处的。在现代的JVM中情况并非如此，因为大部分情况下对象的创建非常快，但是由于该行为是EJB规范中描述的，所有供应商都应支持它。然而，当使用数据库并发策略时，容器从缓存中取出“无状态的”bean实例，并且必须执行一条SQL选择操作以获得最新数据并填充实例字段。</P>
<P>　　这种方法可能还不错，因为我们不用担心“不新鲜的”bean实例（当数据库中的数据被从同一集群中的另一个节点或者从不同应用程序中更新时），但是性能也同样受到明显影响。您总是在每次事务的开始以一个额外的select操作结束，即使您只是打算更新bean中的数据而对之前的值并不感兴趣。因此，在主要或仅是执行更新或插入操作的应用程序中使用实体bean意义不大——容器可能花大量时间做不必要的选择操作，然后再抛弃数据。</P>
<P>　　排他性和数据库并发策略至少存在一个共同问题：更新丢失的可能性。可以想象两个客户端几乎同时更新映射到一个实体bean的表中的同一条记录。如果数据库中没有锁，先完成的更新操作的结果会被其次完成的更新所覆盖。这是否是可接受的结果取决于您的业务<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。更新丢失通常是不可接受或者不想要的；因此，应用程序需要某种机制来避免或检测更新丢失的情况，并且有机会恢复。当应用程序部署再多个节点上时使用排他性策略将不能控制更新丢失问题。但是如我之前所述，您不应再考虑该该策略。</P><BR>]]></description>
    <pubDate>Thu, 26 Mar 2009 11:00:50 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[WebLogic性能：速度不是一切]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2009/0326/161414.html</link>
    <description><![CDATA[追求原始速度的过程，会使可读性强的代码变得晦涩难懂（通常是无用的——目前的优化编译器相当不错），从而导致以后维护困难；而且在很多情况下，整体方案中的优化<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能指标</A></STRONG>无法吸引人们的兴趣。很多人只注重完成一次请求所需的时间——“这次交易仅用了20微秒就从储蓄帐户中取出500英镑，哇！” 
<P>　　对于事务型系统来说，系统的吞吐量通常远远要比一次请求的绝对速度更吸引人（尽管这么说，执行事务所需的时间还是必须满足某种限制条件）。吞吐量衡量系统在达到响应时间目标的情况下可以处理的工作量。当然了，系统中更多的客户端请求事务是产生更多工作的部分原因。此处的另一个有趣的因素是，响应时间和客户端数量不是独立的变量——抛给系统工作的客户端越多，单个事务就越有可能使用更长的时间。因此，（在给定的部署环境下）系统的最大吞吐量支配着多少个客户端可以以某个预期的速率提交事务，并将多少事务（比如说90%）的响应时间维持在要求的时限内。得出这个结论以后，在尝试预测生产设置以满足所需的服务水平并优化<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>资源的使用时，更改各种系统参数（执行线程数、<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>连接数、机器数等等）会不断地产生有趣的结果。</P>
<P>　　事实上，对于任何使用应用服务器的人来说，单个事务的个体往返时间对性能没有太大影响已经不是什么新鲜之谈了。很明显，优化的方式是尽可能地缩短客户端和该客户端所作用的后端之间的代码路径——而客户端和后端之间的应用服务器基础架构中的粘合层显然不利于缩短代码路径。但是，它却能提高吞吐量，这主要是通过在客户端中间共享稀有的服务器端资源（数据库连接、线程等等）而实现的。如果简单地通过缩短代码路径来提高性能，最终只会在客户端数目和服务器上所使用的资源之间建立一对一的关系；而一旦所有的服务器资源都被使用了，就会产生性能瓶颈，吞吐量也就无法进一步得到提升，除非可以整合更多的资源并共享出来。应用服务器的真正作用是，通过在客户端之间共享来节约服务器端所使用的资源数（代价是会产生较长的代码路径，这暗示着会或多或少地延长事务的往返时间），从而提高系统的最大可能吞吐量。从这方面来说，“我不使用事务，它们会降低速度”的说法是有道理的。</P>
<P>　　到目前为止，我们已经看到，系统要在有限的服务器资源下运行尽可能多的请求。但是没有说所有这些请求必须得到正确的结果——也就是说，任何独自执行的请求的结果应当与它与其他许多请求一起执行时所得到的结果一致（或者说，请求应当具有隔离性，当然了，隔离性(isolation)就是ACID中的“I”，而提供ACID属性的是事务）。因此，使用XA事务的代价是牺牲一点点绝对性能，而益处是得到正确的事务结果。如果您存款的<STRONG><A href="http://www.ltesting.net/html/01/category-catid-101.html" target="_blank" >银行</A></STRONG>使用XA，那么您就可以高枕无忧了，因为您知道，即使在某些模糊负载条件下从银行帐户中提款也不会出错！</P>
<P>　　这些讨论全都发生在数据层——XA完全是关于数据库事务的。每一个事务会将数据锁定在数据库中，直到事务完成；随后等待方才能看得到结果。当多个请求试图访问相同的数据时，事务就会引发瓶颈问题——除了第一个锁定争用数据的请求之外，其他请求都被阻塞或抛出，从而严重地影响了吞吐量，因为正在做的工作不会导致系统中有一个良好的事务流。</P>
<P>　　然而，数据库中的数据不是事务系统中唯一共享的资源。我已经讨论了应用服务器作为资源共享机制的作用——任一个资源都可能被争用；因此，如果多个请求同时访问，则应用服务器本身需要锁定内存中的数据结构以避免产生问题，而且这里也会产生争用。当然了，除应用服务器之外的各层也进行资源共享——在一个典型服务器中，为<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target=_blank>WebLogic</A></STRONG>配置的60个执行线程很可能至多在几个CPU中执行——当发生CPU争用时，那些不走运的线程就必须在队列中等待，直到某个CPU空闲；内存或者硬盘也是如此。</P>
<P>　　总之，到目前为止我所提到的都是大问题——<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能测试</A></STRONG>的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>、完成所有调优后测试的运行、满足预期要求的服务器资源分配，这些都随着不断变化的应用程序版本和服务器环境版本而反复进行，产生的特定系统必须承受得起不可预知的实际负载。这些不只是难题，也是每一个应用程序生命周期成本的主要部分。</P>
<P>　　聪明的读者会注意到我的电子邮件地址已经变更；这是因为我已经加入了Azul Systems，该公司有应对上述问题的独特<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>。<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>是多线程的，因此可以提供包含多个CPU且每个CPU都具有多个内核的系统；这些Java线程实际上就产生了并行化；其次，它提供对同步Java对象的乐观锁定的支持，以减少Java软件层中的争用；再次，它提供可以在多个应用程序之间共享的内存池。总而言之，Azul Appliance提供了一种Java执行引擎，它通过为单个应用程序提供大量的CPU和内存资源，从而试图缓解传统虚拟机环境中由于CPU或内存不足而产生的瓶颈，从而降低了系统使用的资源量。</P>
<P>　　该策略还有另外一个优点，即它在一定程度上避免了基于每个应用程序进行调优的需要，这是因为设备提供的资源非常多，以至于可以轻松地在多个应用程序之间共享；而以前，每一个应用程序都需要在自己的服务器上为<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>峰值预留一定的空间。这种共享是可以实现的，因为总的来说，需求峰值是平滑的（因为很多不相关的应用程序同时达到需求峰值的情况不大可能发生）；因此，需求可以通过池化的资源得到满足，从而使您既不用担心应用程序级的大小（以及相关成本），也不用担心每个应用程序基础上的硬件过量供应。这预示着一个以低成本采购和管理的设备来运行高性能Java应用程序的新时代来临了。</P>]]></description>
    <pubDate>Thu, 26 Mar 2009 10:27:30 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[基于 WebSphere Application Server 的应用程序的软件性能测试规划]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/websphe/2009/0325/161385.html</link>
    <description><![CDATA[在本文中，Alexandre Polozoff 提供对基于 WebSphere Application Server 的应用程序进行<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能测试</A></STRONG>的规划，其中有关于规划、建立性能环境、进行实际的测试和测量应用程序的特征的信息。性能测试是确定应用程序在各种负载情景中的（JVM、连接池等）最佳设置的唯一方式。每个应用程序是不同的且在不同的条件下的行为也不同，这意味着所有应用程序在生产环境中被实现前必须经历<A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank><STRONG>性能测试</STRONG></A>活动。<BR>&copy; Copyright International Business Machines Corporation 2002.All rights reserved. 
<P>引言</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protocol（规划）一词被定义为“科学的或医学的实验、处理或过程的详细规划”。本文提供对基于 WebSphere&reg; Application Server 的应用程序进行性能测试的规划，其中有关于规划、建立性能环境、进行实际的测试和测量应用程序的特征的信息。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank><STRONG>性能测试</STRONG></A>是确定应用程序在各种负载情景中的（JVM、连接池等）最佳设置的唯一方式。每个应用程序是不同的且在不同的条件下的行为也不同，这意味着所有应用程序在生产环境中被实现前必须经历性能测试活动。</P>
<P>性能<A href="http://www.ltesting.net/html/74/category-catid-374.html" target=_blank><STRONG><STRONG><A href="http://www.ltesting.net/html/74/category-catid-374.html" target="_blank" >测试环境</A></STRONG></STRONG></A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P>在理想的情况下，性能测试环境应在每个细节（从服务器防火墙和后端资源的数量到<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>电缆的规格）上完全模仿生产环境。然而，由于大容量生产环境的大小和规模，这是不实际的。包括最少两台或三台在物理上分离的 WebSphere Application Server 机器的更小的环境是更典型的性能测试的基本配置。</P>
<P><BR>图 1. 基本的性能环境<BR></P>
<P></P>
<P>&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如图 1 所示，分布式空间中的基本的性能环境有两台连接到远程<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>并由一台远程 HTTP 服务器驱动的在物理上分离的 WebSphere Application Server。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果 HTTP 服务器在应用程序的生产环境中是远程的，那么最好使性能环境中的 HTTP 服务器也是远程的。每台 WebSphere Application Server 在自己的节点上独立运行。运行与测试无关的其他应用程序将引入针对本地 CPU、内存和磁盘资源的竞争。这不仅会影响测试的结果，而且这些应用程序与环境的资源的交互是难以估量的。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这两台 WebSphere Application Server 至少应该有相同的机器和 OS 级别的配置。常见的错误包括一台或另一台应用程序服务器使用不同的 OS 补丁或修订包级别或不同的内存配置，这将导致不一致的结果和／或行为。作为题外话，请您一定要确保每台服务器的 TCP/IP 堆栈设置完全相同，尤其是 NIC 卡的双工设置。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在理想的情况下，虽然应用程序数据不必驻留在与管理资源库相同的数据库服务器上，但是管理资源库的所有应用程序数据和数据库将驻留在一台远程的机器上。如果启用了 HTTP 会话持久性，请确保会话表与其他数据库分离且被标记为 VOLATILE。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这并不是说把完全不同的配置用于性能环境是完全不可接受的。在当今的商业环境中，HTTP 服务器常常驻留在每个本地的 WebSphere Application Server 节点上。然而，其中一台 WebSphere Application Server 还作为管理资源库的数据库从而肩负双重责任是不太合乎需要的。这些配置特征和其他配置特征违反了“应用程序不应该参与本地资源的竞争”的约束。性能环境中的这些不平衡可能使最终结果不准确，在许多时候确实如此。然而，虽然折衷的性能测试环境肯定不是更好的选择，但是拥有几乎任何类型的性能测试环境都要比没有环境好。</P>
<P>专用的服务器环境</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显然，测试环境应尽可能地与生产环境相似，因为任何差异（任何方面的差异）将引入不确定性。如果您缩小测试环境，那么您必须扩大结果以取得生产环境中的近似数字。类似地，如果 HTTP 服务器在生产中是独立的，但在测试中被包括在应用程序服务器节点上，那么取得的性能结果也不能准确地反映生产中的结果。配置测试环境是作出选择和让步以获取可能取得的最精确的数据的过程。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P>
<P>]]></description>
    <pubDate>Wed, 25 Mar 2009 09:38:51 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebSphere</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[(三) Tomcat性能调整]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0319/161265.html</link>
    <description><![CDATA[3.加速JSP编译速度<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当第一次访问一个JSP文件时，它会被转换为<A href="http://www.ltesting.net/html/54/category-catid-154.html" target=_blank><STRONG><STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG> </STRONG></A>serverlet源码，接着被编译成<A href="http://www.ltesting.net/html/54/category-catid-154.html" target=_blank><STRONG>Java</STRONG></A>字节码。你可以控制使用哪个编译器，默认情况下，Tomcat使用使用命令行<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >java</A></STRONG>c进行使用的编译器。也可以使用更快的编译器，但是这里我们将介绍如何优化它们。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外一种方法是不要把所有的实现都使用JSP页面，而是使用一些不同的java模板引擎变量。显然这是一个跨越很大的决定，但是事实证明至少这种方法是 只得研究的。如果你想了解更多有关在Tomcat可使用的模板语言，你可以参考Jason Hunter和William Crawford合著的《Java Servlet Programming 》一书（O'Reilly公司出版）。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Tomcat 4.0中可以使用流行而且免费的Jikes编译器。Jikes编译器的速度要由于Sun的Java编译器。首先要安装Jikes（可访问http: //oss.software.ibm.com/pub/jikes 获得更多的信息），接着需要在环境变量中设置JIKESPATH包含系统运行时所需的JAR文件。装好Jikes以后还需要设置让JSP编译 servlet使用Jikes，需要修改web.xml文件中jspCompilerPlugin的值：<BR>
<P>&lt;servlet&gt;<BR>&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<BR>&lt;servlet-class&gt;<BR>org.apache.jasper.servlet.JspServlet<BR>&lt;/servlet-class&gt;<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;<BR>&lt;param-value&gt;WARNING&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;init-param&gt;<BR>&lt;param-name&gt;jspCompilerPlugin&lt;/param-name&gt;<BR>&lt;param-value&gt;<BR>org.apache.jasper.compiler.JikesJavaCompiler<BR>&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;init-param&gt;<BR>&lt;!-- &lt;param-name&gt;<BR>org.apache.catalina.jsp_classpath<BR>&lt;/param-name&gt; --&gt;<BR>&lt;param-name&gt;classpath&lt;/param-name&gt;<BR>&lt;param-value&gt;<BR>/usr/local/jdk1.3.1-<STRONG><A href="http://www.ltesting.net/html/68/category-catid-468.html" target="_blank" >linux</A></STRONG>/jre/lib/rt.jar:<BR>/usr/local/lib/java/servletapi/servlet.ja<BR>r&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<BR>&lt;/servlet&gt;</P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Tomcat 4.1（或更高版本），JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪，但这正是Ant有意为之的一部分，有一 个API文档指导<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>者在没有启动一个新的JVM的情况下，使用Ant。这是使用Ant进行Java开发的一大优势。另外，这也意味着你现在能够在Ant 中使用任何javac支持的编译方式，这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的，因为你只需要在 元素中定义一个名字叫“compiler”，并且在value中有一个支持编译的编译器名字，示例如下：<BR>
<P></P>
<P>]]></description>
    <pubDate>Thu, 19 Mar 2009 09:25:26 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[(二)Tomcat性能调整]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0319/161264.html</link>
    <description><![CDATA[2.操作系统<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>优化<BR><BR>　 　这里说的操作系统是指运行web<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>的系统软件，当然，不同的操作系统是为不同的目的而设计的。比如OpenBSD是面向<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>的，因此在它的内核中有 许多的限制来防止不同形式的服务攻击（OpenBSD的一句座右铭是“默认是最安全的”）。这些限制或许更多地用来运行活跃的web服务器。<BR><BR>　 　而我们常用的<STRONG><A href="http://www.ltesting.net/html/68/category-catid-468.html" target="_blank" >Linux</A></STRONG>操作系统的目标是易用使用，因此它有着更高的限制。使用BSD内核的系统都带有一个名为“Generic”的内核，表明所有的驱 动器都静态地与之相连。这样就使系统易于使用，但是如果你要创建一个自定义的内核来加强其中某些限制，那就需要排除不需要的设备。Linux内核中的许多 驱动都是动态地加载的。但是换而言之，内存现在变得越来越便宜，所以因为加载额外的设备驱动就显得不是很重要的。重要的是要有更多的内存，并且在服务器上 腾出更多的可用内存。<BR><BR>　　小提示：虽然现在内存已经相当的便宜，但还是尽量不要购买便宜的内存。那些有牌子的内存虽然是贵一点，但是从<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >可靠性</A></STRONG>上来说，性价比会更高一些。<BR><BR>　　如果是在<STRONG><A href="http://www.ltesting.net/html/75/category-catid-375.html" target="_blank" >Windows操作系统</A></STRONG>上使用<STRONG><A href="http://www.ltesting.net/html/45/category-catid-445.html" target="_blank" >Tomcat</A></STRONG>，那么最好选择服务器版本。因为在非服务器版本上，最终用户授权数或者操作系统本身所能承受的用户数、可用的<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>连接数或其它方面的一些方面都是有限制的。并且基于安全性的考虑，必须经常给操作系统打上最新的补丁。<BR><BR>　　3.Tomcat与其它web服务器整合使用<BR><BR>　 　虽然<STRONG><A href="http://www.ltesting.net/html/45/category-catid-445.html" target="_blank" >tomcat</A></STRONG>也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把 apache和tomcat集成起来，将html与jsp的功能部分进行明确分工，让tomcat只处理jsp部分，其它的由apache,IIS等这些 web服务器处理，由此大大节省了tomcat有限的工作“线程”。<BR><BR>　　4.负载均衡<BR><BR>　　在负载均衡的思路下，多台服务器为对称方式，每台服务器都具有同等的地位，可以单独对外提供服务而无须其他服务器的辅助。通过负载分担技术，将外部发送来的请求按一定规则分配到对称结构中的某一台服务器上，而接收到请求的服务器都独立回应客户机的请求。<BR><BR>　　提供服务的一组服务器组成了一个应用服务器集群(cluster)，并对外提供一个统一的地址。当一个服务请求被发至该集群时，根据一定规则选择一台服务器，并将服务转定向给该服务器承担，即将负载进行均衡分摊。<BR><BR>　 　通过应用负载均衡技术，使应用服务超过了一台服务器只能为有限用户提供服务的限制，可以利用多台服务器同时为大量用户提供服务。当某台服务器出现故障 时，负载均衡服务器会自动进行检测并停止将服务请求分发至该服务器，而由其他工作正常的服务器继续提供服务，从而保证了服务的可靠性。<BR><BR>　 　负载均衡实现的方式大概有四种：第一是通过DNS，但只能实现简单的轮流分配，不能处理故障，第二如果是基于MS IIS，Windows 2003 server本身就带了负载均衡服务，第三是硬件方式，通过交换机的功能或专门的负载均衡设备可以实现，第四种是软件方式，通过一台负载均衡服务器进行， 上面安装软件。使用Apache Httpd Server做负载平衡器，Tomcat集群节点使用Tomcat就可以做到以上第四种方式。这种方式比较灵活，成本相对也较低。另外一个很大的优点就是 可以根据应用的情况和服务器的情况采取一些策略。<BR><BR>四. 自身调整<BR><BR>　　本节将向您详细介绍一些加速可使Tomcat实例加速运行的技巧和方法，无论是在什么操作系统或者何种<STRONG><A href="http://www.ltesting.net/html/54/category-catid-154.html" target="_blank" >Java</A></STRONG>虚拟机上。在有些情况下，您可能没有控制部署环境上的操作系统或者Java虚拟机。在这种情况下，您就需要逐行了解以下的的一些建议，然而你应该在修改后使之生效。我认为以下方法是Tomcat性能自身调整的最佳方式。<BR><BR>　　
<P>]]></description>
    <pubDate>Thu, 19 Mar 2009 09:18:21 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[(一)Tomcat性能调整]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/tomcat/2009/0318/161259.html</link>
    <description><![CDATA[<P>一. 引言<A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank><STRONG><STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能测试</A></STRONG></STRONG></A></P>
<P><A href="http://www.ltesting.net/html/95/category-catid-95.html" target=_blank><STRONG>性能测试</STRONG></A>与分析是软件<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>过程中介于架构和调整的一个广泛并比较不容易理解的领域，更是一项 较为复杂的活动。就像下棋<STRONG><A href="http://www.ltesting.net/html/03/category-catid-103.html" target="_blank" >游戏</A></STRONG>一样，有效的性能测试和分析只能在一个良好的计划策略和具备了对不可预料事件的处理能力的条件下顺利地完成。一个下棋高手赢 得比赛靠的不仅仅是对游戏规则的认识，更是靠他的自己的能力和不断地专注于分析自己对手的实力来更加有效地利用和发挥规则的作用。同样一个优秀的性能测试 和分析人员将要面对的是来自一个全新的应用程序和环境下带来的整个项目的挑战。本文中作者结合自己的使用经验和参考文档，对<STRONG><A href="http://www.ltesting.net/html/45/category-catid-445.html" target="_blank" >Tomcat</A></STRONG>性能方面的调整做 一简要的介绍，并给出Tomcat性能的测试、分析和调整优化的一些方法。</P>
<P>二. 测量Web<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>的性能</P>
<P>测量web服务器的性能是一项让人感到畏缩的任务，但是我们在这里将给出一些需要注意的地方 并且指点你了解其中更多的细节性的内容。它不像一些简单的任务，如测量CPU的速率或者是测量程序占用CPU的比例，web服务器的性能优化中包括许调整 许多变量来达到目标。许多的测量策略中都包含了一个看似简单的浏览实际上是在向服务器发送大量的请求，我们称之为客户端的程序，来测量响应时间。客户端和 服务器端是在同一台机器上吗？服务器在测试的时候还运行着其它的什么程序吗？客户端和服务器端的通讯是通过局域网，100baseT，10baseT还是 使用调制解调器？客户端是否一直重复请求相同的页面，还是随机地访问不同的页面？（这些影响到了服务缓存的性能）客户端发送请求的有规律的还是突发的？你 是在最终的配置环境下运行服务的还是在调试的配置环境下运行服务的？客户端请求中包含图片还是只有HTML页面？是否有请求是通过servlets和 JSP的，CGI程序，服务端包含（Server-Side Includes ，SSI是一个可以让你使用动态HTML文件的技术）？所有这些都将是我们要关心的，并且几乎我们不可能精确地把所有的问题都清楚地列出来。</P>
<P>1.压力测试工具</P>
<P>“工欲善其事，必先利其器”，压力测试只有借助于一些工具才可得以实施。</P>
<P>大多数web压力测试工具的实现原理都是通过重复的大量的页面请求来模拟多用户对被测系统的 并发访问，以此达到产生压力的目的。产生压力的手段都是通过录制或者是编写压力脚本，这些脚本以多个进程或者线程的形式在客户端运行，这样通过人为制造各 种类型的压力，我们可以观察被测系统在各种压力状况下的表现，从而定位系统瓶颈，作为系统调优的基础。目前已经存在的性能测试工具林林总总，数量不下一百 种，从单一的开放源码的免费小工具如 Aapache 自带的 web 性能测试工具 Apache Benchmark、<STRONG><A href="http://www.ltesting.net/html/3/category-catid-3.html" target="_blank" >开源</A></STRONG>的Jmeter 到大而全的商业性能测试软件如 Mercury 的 LoadRunner 等等。任何性能测试工具都有其优缺点，我们可以根据实际情况挑选用最合适的工具。</P>
<P>这里我们所使用的工具要支持web应用服务认证才可以，要支持接收发送cookies，不仅 如此Tomcat支持多种认证方式，比如基本认证、基于表单的认证、相互认证和客户端认证，而一些工具仅仅支持HTTP基本认证。真实地模拟用户认证是性 能测试工具的一个重要的部分，因为认证机制将对一个web站点的性能特征产生重要的影响。基于你在产品中使用的不同的认证方式，你需要从上面的工具列表中选择使用这种特性的测试工具。</P>
<P>Apache Benchmark和http_load是命令行形式的工具，非常易于使用。Apache Benchmark可以模仿单独的URL请求并且重复地执行，可以使用不同的命令行参数来控制执行迭代的次数，并发用户数等等。它的一个特点是可以周期性 地打印出处理过程的信息，而其它工具只能给出一个全局的报告。</P>
<P>2.压力测试工具介绍</P>
<P>三. 外部环境的调整</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Tomcat和应用程序进行了压力测试后，如果您对应用程序的性能结果不太满意，就可以采取一些性能调整措施了，当然了前提是应用程序没有问题，我们这里 只讲Tomcat的调整。由于Tomcat的运行依赖于JVM，所以在这里我们把Tomcat的调整可以分为两类来详细描述：</P>
<P>　　</P>
<P>]]></description>
    <pubDate>Wed, 18 Mar 2009 10:46:22 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>tomcat</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[软件测试之WebLogic Server 性能调优]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2009/0316/161207.html</link>
    <description><![CDATA[任何在市场上成功的产品都拥有良好的性能。虽然成为象WebLogic Server这样广泛使用的产品需要具备很多特性，但性能绝对是必不可少的。<BR>　　良好的编程习惯在帮助应用运行方面起了很大的作用，但是仅有它们还是不够的。应用<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>必须能够在多种硬件和操作系统之间移植，必须具备通用性以便处理范围更广的应用类型。这就是为什么应用服务器都提供了丰富的调试“按钮”的原因，通过调整这些“按钮”，能够使服务器更适合运行环境以及应用程序。 
<P>　　本文针对WebLogic讨论了其中的某些调试参数，不过并未将所有可调整的属性全部列出。此外，在将此处推荐的方法运用到产品环境之前，建议您先在<A href="http://www.ltesting.net/html/74/category-catid-374.html" target=_blank><STRONG><STRONG><A href="http://www.ltesting.net/html/74/category-catid-374.html" target="_blank" >测试环境</A></STRONG></STRONG></A>中对它们测试一番。</P>
<P>　　性能监控及瓶颈发现</P>
<P>　　性能调试的第一步是孤立“危险区域”。性能瓶颈可以存在于整个系统的任一部分<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>、<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>、客户端或应用服务器。重要的是首先确定哪个系统组件引起了性能问题，调试错了组件可能会使情况更糟。</P>
<P>　　WebLogic Server为系统管理员提供了管理控制台和命令行工具两种方式监控系统性能。服务器端有叫作mbean的集合，用于搜集诸如线程消耗情况、资源剩余情况、缓存使用情况等信息。控制台和命令行管理器都可以从服务器将这些信息调用出来。图1的屏幕快照就显示了EJB容器中缓存的使用和剩余情况，这是控制台提供的性能监控的选项之一。</P>
<P>　　代码分析器也是应用代码用以探测自身性能瓶颈的另一种有效的工具。有几个很好的代码分析器，如:Wily Introscope, Jprobe, Optimizelt。</P>
<P>　　EJB 容器</P>
<P>　　EJB容器中最昂贵的操作当然是数据库调用?D?D装载和存储实体bean。容器也因此提供了各种各样的参数以便减少数据库的访问次数。但不管怎样，除非是在特殊情况下，否则在每个bean的每次交易中，至少都得有一次装载操作和一次存储操作。这些特殊情况是:</P>
<P>　　1. Bean是只读的。此时，bean只需在第一次访问时装载一次，从来不需要存储操作。当然，如果超出参数read-timeout-seconds的设置，bean将被再次装载。</P>
<P>　　2. Bean 有专门的或积极的并发策略，且参数db-is-shared 设置为假。此参数在WebLogic Server 7.0中被重新命名为cache-between-transactions。参数db-is-shared 设置为假相当于参数cache-between-transactions设置为真。</P>
<P>　　3. Bean在交易中未被修改过，此时，容器会将存储操作优化掉。</P>
<P>　　如果不属于上述任何一种情况，则code path中的每个实体bean在每次交易时，至少会被装载和存储一次。有些特征能够减少数据库的调用或者降低数据库调用的开销，如:高速缓存技术、域(field)分组、并发策略以及紧密关联缓存(eager relationship caching)等,其中的某些特征是WebLogic Server 7.0新增的。</P>
<P>　　高速缓存:实体bean缓存空间的大小由<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >weblogic</A></STRONG>-ejb-jar.xml中的参数max-beans-in-cache定义。容器在交易中第一次装载bean时是从数据库调用的，此时bean也被放在缓存中。如果缓存的空间太小，有些bean就被滞留在数据库中。这样，如果不考虑前面提到的前两种特殊情况的话，这些bean在下次调用时就必须重新从数据库装载。从缓存调用bean也意味着此时不必调用setEntityContext()。如果bean的关键(主)键是组合域或者比较复杂，也能省却设置它们的时间。</P>
<P>　　域分组:域分组是对于查找方法指定从数据库加载的域。如果实体bean与一个较大的BLOB域(比方说，一幅图像)相联系，且很少被访问，则可以定义一个将此域排除在外的域组，该域组与一个查找方法相关联，这样查找时，BLOB域即不会被装载。这种特征只对EJB2.0的bean 适用。</P>
<P>　　并发策略:在WebLogic Server 7.0中，容器提供了四种并发控制机制。它们是独占式、数据库式、积极式和只读式。并发策略与交易进行时的隔离级别紧密相关。并发控制并不是真正意义上的提高性能的措施，它的主要目的是确保实体bean所表示的数据的一致性，该一致性由bean的部署器所强制要求。无论如何，某些控制机制使得容器处理请求的速度比其它的要快一些，但这种快速是以牺牲数据的一致性为代价的。</P>
<P>　　最严格的并发策略是独占式，利用特殊主键对bean的访问是经过系列化的，因此每次只能有一个交易对bean进行访问。这虽然在容器内提供了很好的并发控制，但性能受到限制。在交易之间允许互为缓存的时候，这种方法很有用，但在集群环境中不能使用，此时，装载操作被优化掉，因此可能导致丧失并行性。</P>]]></description>
    <pubDate>Mon, 16 Mar 2009 12:22:18 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[丁中：IPTV中间件重点在终端]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/160000.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV><FONT color=#000000 size=3>IPTV</FONT><FONT color=#000000>特别工作组和流媒体网联合主办的“IPTV中间件技术及标准化研讨会”在<STRONG><A href="http://www.ltesting.net/html/02/category-catid-102.html" target="_blank" >电信</A></STRONG>研究院举行</FONT> 
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 以下是茁壮<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>丁中博士的演讲:</FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 很高兴有这个机会谈谈茁壮网络及我个人对中间件的一些看法。</FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; IPTV在国内的基本现状：IPTV在中国是在数字电视的产业背景下出现的，2007年初有五六十万的规模，但同时IPTV也存在着如下的一些问题。</FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 1.系统厂家各自为政，各厂商都希望通吃整个系统，所以没有开放，也没有统一。 </FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 2.<STRONG><A href="http://www.ltesting.net/ceshi/video" target="_blank" >视频</A></STRONG>编码标准仍然有不确定因素，尽管大家已经知道，信产部已经确定</FONT><FONT color=#000000 size=3>AVS</FONT><FONT color=#000000>是主要推进方向。 </FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 3.不同的机构、运营上和组织都在做一些IPTV标准的工作，最后的统一标准也还没有公布。 </FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 4.在内容和运营方面，IPTV也是受制于广电的，专业的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>商和服务商这个群体是不存在的。 </FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 5.网络环境也不够理想，带宽还是不足。 </FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 6.用户的体验在目前情况下是不够的。 </FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 关于IPTV中间件ITU-T有个定义，这里就不多说了，国内的运营商也有他们对中间件的体系架构，而茁壮网络关注的重点是从终端系统入手。在这副图中，绿色部分是我们所定义的中间件。</FONT></P>
<P><FONT color=#000000>&nbsp;&nbsp;&nbsp; 我们把IPTV中间件和D<STRONG><A href="http://www.ltesting.net/html/56/category-catid-156.html" target="_blank" >VB</A></STRONG>中间件作了一个简单对比，概括起来说，目前IPTV中间件大家关注的重点是播出前端。但是，我们认为这种关注重点前后颠倒了，其实重点应该在终端。</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 10:08:15 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[IPTV中间件技术的探讨]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159999.html</link>
    <description><![CDATA[<DIV class=key align=left>
<P>&nbsp;</P>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV><STRONG>一、研究背景</STRONG> 
<P>&nbsp;&nbsp;&nbsp; &#61550;内容运营商和业务运营商在实际工作过程中都从不同角度提出了对中间件技术的<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>；</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;IPTV系统设备和终端设备制造商为降低发展成本都提出了对中间件技术的需求，但各厂家的理解差异明显；</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;中国通信标准化协会开展IPTV中间件研究报告已经完成初稿，主要针对中间件的发展现状，基本定位和解决思路；中国代表团将向国际<STRONG><A href="http://www.ltesting.net/html/02/category-catid-102.html" target="_blank" >电信</A></STRONG>联盟已提交相应的提案，以推动国内标准化研究成果走向国际；</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;<FONT size=3>AVS</FONT>-IPTV试验出现瓶颈，急需解决不同厂家的终端或系统之间的互通问题，目前比较现实的方法是通过中间件的方式。</P>
<P>&nbsp;&nbsp;&nbsp; 对中间件技术的主要关注点</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;不同厂家的IPTV终端和IPTV局端系统需要通过低成本、易实现的方式实现互联互通；不同厂家的IPTV局端系统需要实现互联和互操作；</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;IPTV业务运营商需要IPTV系统中不同位置的业务应用模块均可以动态加载，实现业务功能的平滑升级；希望业务开展过程中IPTV终端通过中间件模块实现业务和管理的动态加载；</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;IPTV终端厂商能够实现各中间件<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>平台的API接口遵循标准统一的接口规范，支持自身产品的通用性和从而降低自身产品开发成本</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;第三方IPTV应用开发商在IPTV系统业务平台上开发各种增值应用，并可灵活地修改和添加；</P>
<P>&nbsp;&nbsp;&nbsp; &#61550;业务平台提供商希望通过统一的中间件平台和不同类型、不同需求的内容提供商快速连接。</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 10:04:33 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[IPTV终端中间件的研究]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159998.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>&nbsp;1、<FONT size=3><STRONG>IPTV</STRONG></FONT><STRONG>终端中间件的作用</STRONG> 
<P>&nbsp;&nbsp;&nbsp; IPTV中间件是当前IPTV业界关注的热点之一。业界对于中间件没有确切的定义，一般认为：中间件是实现异构软件实体间互连互通的一类软件，则IPTV中间件就是实现IPTV系统中各个节点之间互连互通的一类软件。IPTV系统中的节点类型众多，包括终端、EPG（电子节目指南）<FONT size=3><STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG></FONT>、内容分发系统、业务管理系统、网管监控系统、DRM（数字版权管理）、内容管理系统、头端系统等，除终端外，其他节点都可以统称为平台侧，因此IPTV中间件也可以分为平台中间件和终端中间件两类。平台中间件实现系统平台中各个应用服务器之间的互连互通，终端中间件实现IPTV终端和系统平台之间的互连互通。</P>
<P>&nbsp;&nbsp;&nbsp; IPTV系统中所有节点都通过中间件来通信，实现完全的开放和互连互通，这固然是一种理想的状态，但从产业现状来看，目前是不现实的。因为IPTV系统中的每个领域都有专业的软件提供商，定义并<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>一套完整的中间件。能够与各个领域中的各个专业厂商的系统对接，搭建成一套IPTV系统，目前来说难度很大。</P>
<P>&nbsp;&nbsp;&nbsp; 具有现实意义的是终端中间件。IPTV终端的数量将随着用户数的增长不断增长，同时，终端的形态、档次日趋多样化，必须引入多家终端厂商，引入多样化的硬件<FONT size=3><STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG></FONT>和基础软件解决方案，才能满足用户的个性化<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>以及引入竞争，降低终端成本。终端中间件可以屏蔽终端硬件和基础软件的差异性。使不同厂商的终端快速地与系统平台对接，同时使IPTV增值业务可以快速、灵活地在终端上部署，缩短开发周期，降低开发成本。</P>
<P>&nbsp;&nbsp;&nbsp; IPTV产业链各方出于各自的利益，对于终端中间件的诉求也是不同的。应用提供商希望通过中间件降低应用开发门槛；终端厂商希望通过中间件接入多家系统平台，推广自己的产品；运营商希望通过中间件在价值链中更具聚合力，吸引更多SP，引入更多终端厂商，最终将业务做大。对于平台设备厂商，终端中间件的利益则不那么明显。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG><A href="http://www.ltesting.net/html/02/category-catid-102.html" target="_blank" >电信</A></STRONG>运营商希望通过IPTV终端中间件达到以下目标：</P>
<P>&nbsp;&nbsp;&nbsp; ●实现IPTV终端与IPTV系统平台的互连互通，方便引入多家终端厂商。</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 10:01:51 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件应具有如下的一些特点]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159997.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：中间件</DIV>
<P>满足大量应用的需要运行于多种硬件和OS平台支持分布计算，提供跨<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>、硬件和OS平台的透明性的应用或服务的交互支持标准的协议支持标准的接口。 <BR><BR>由于标准接口对于可移植性和标准协议对于互操作性的重要性，中间件已成为许多标准化工作的主要部分。对于应用软件<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>，中间件远比操作系统和网络服务更为重要，中间件提供的程序接口定义了一个相对稳定的高层应用环境，不管底层的计算机硬件和系统软件怎样更新换代，只要将中间件升级更新，并保持中间件对外的接口定义不变，应用软件几乎不需任何修改，从而保护了企业在应用软件开发和维护中的重大投资。 <BR><BR><STRONG>主要中间件的分类</STRONG> <BR><BR>中间件所包括的范围十分广泛，针对不同的应用<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义，因此，在不同的角度或不同的层次上，对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议，它必须能够提供分布环境下的通讯服务，我们将这种通讯服务称之为平台。基于目的和实现机制的不同，我们将平台分为以下主要几类： <BR><BR>远程过程调用（Remote Procedure Call）面向消息的中间件（Message-Oriented Middleware）对象请求代理（Object Request Brokers） <BR><BR>它们可向上提供不同形式的通讯服务，包括同步、排队、订阅发布、广播等等，在这些基本的通讯平台之上，可构筑各种框架，为应用程序提供不同领域内的服务，如事务处理监控器、分布数据访问、对象事务管理器OTM等。平台为上层应用屏蔽了异构平台的差异，而其上的框架又定义了相应领域内的应用的系统结构、标准的服务组件等，用户只需告诉框架所关心的事件，然后提供处理这些事件的代码。当事件发生时，框架则会调用用户的代码。用户代码不用调用框架，用户程序也不必关心框架结构、执行流程、对系统级API的调用等，所有这些由框架负责完成。因此，基于中间件开发的应用具有良好的可扩充性、易管理性、高可用性和可移植性。</P>
<P>csdn评：满足大量应用的需要运行于多种硬件和OS平台支持分布计算，提供跨网络、硬件和OS平台的透明性的应用或服务的交互支持标准的协议支持标准的接口。</P>]]></description>
    <pubDate>Wed, 29 Oct 2008 10:01:01 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[在WebLogic环境中考虑SOA]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/weblogi/2008/1029/159994.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>最近我在为一个客户工作，他们有许多部署在<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG> 8.1上的J2EE应用程序，需要我帮助他们把应用程序资产转化为<STRONG><A href="http://www.ltesting.net/html/73/category-catid-173.html" target="_blank" >SOA</A></STRONG>的服务资产。他们有严格的时限，所以不能对应用程序代码进行大的改动。在讨论中，他们不断提出关于Web服务的问题，我感觉人们通常将Web服务看作SOA的构件块。他们关注的是将应用程序组件转化为Web服务以及由此给整体环境和操作带来的影响。 
<P>&nbsp;&nbsp;&nbsp; 许多人将Web服务看作SOA基础架构的构件块，这并不奇怪。我认为Web服务可以是SOA的构件块，但并不一定是必需的。下面我将介绍为什么以及如何可以将部署在WebLogic Server上的应用程序组件看作作为SOA一部分的服务。</P>
<P>&nbsp;&nbsp; 应用程序可以被分解为实现业务功能的组件。每一个应用程序都有特定的业务、功能和操作<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。功能需求要迎合实现，在这方面我不准备花太多时间介绍，因为我们讨论的是已经成为企业一部分的、需要转化为SOA构件块的应用程序。此时我们需要关注的是，如何关联业务需求并为该应用程序提供一个轻松的操作环境。</P>
<P>&nbsp;&nbsp;&nbsp; 许多业务需求都归结为对应用程序的服务水平协议(SLA)的满足，业务需求可能包括以下方面:</P>
<P>&nbsp;&nbsp;&nbsp; 并发用户 <BR>&nbsp;&nbsp;&nbsp; 响应时间 <BR>&nbsp;&nbsp;&nbsp; 错误率 <BR>&nbsp;&nbsp;&nbsp; 工作负载优先化(业务功能按照优先级进行分解) <BR>&nbsp;&nbsp;&nbsp; 应用程序采用率(就用户数目而言的应用程序扩展路线图) <BR>&nbsp;&nbsp;&nbsp; 可用性 </P>
<P>&nbsp;&nbsp;&nbsp; 操作需求与维护基础架构有关，可能包括以下方面:</P>
<P>&nbsp;&nbsp;&nbsp; 应用程序监控 <BR>&nbsp;&nbsp;&nbsp; 部署策略 <BR>&nbsp;&nbsp;&nbsp; 维护(补丁、升级) <BR>&nbsp;&nbsp;&nbsp; 问题诊断 </P>
<P>&nbsp;&nbsp;&nbsp; 大多数情况下，WebLogic实例上部署了许多应用程序，难以将上述需求关联到该环境中。</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:57:44 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>WebLogic</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件在WAP领域的创新点[1]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159993.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>&nbsp;一、WAP领域发展形势 
<P>&nbsp;&nbsp;&nbsp; 当今世界，移动通信和互联网已经成为信息产业的两大支柱，而移动互联网由于具有将这两大领域融合的能力，引发了设备制造商、<STRONG><A href="http://www.ltesting.net/html/02/category-catid-102.html" target="_blank" >电信</A></STRONG>运营商、软件<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>商以及信息提供商等各方面的极大关注，移动互联网市场散发出的魅力与日俱增，日益受到人们的广泛关注。据互联网广告监测权威机构艾瑞咨询发布的最新数据显示，中国WAP 用户数在2005 年已经激增到7200 万户，预计到2008 年中国WAP 用户规模将达到2.3 亿户。伴随着中国WAP 上网用户规模的高速增长，无线互联网市场规模也势必形成井喷之势。现在每月新增wap 站点5000个左右，但由于无线技术相对门槛较高，对无线用户特点不了解，造成普通网站<STRONG><A href="http://www.ltesting.net/html/5/category-catid-5.html" target="_blank" >质量</A></STRONG>偏低，很难满足用户及企业的<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。</P>
<P>&nbsp;&nbsp;&nbsp; 二、中间件领域优势</P>
<P>&nbsp;&nbsp;&nbsp; 中间件领域的产品通过多年研发，大都具有较好的技术实力，无论对底层还是应用层都有着深入的理解。在技术和业务上都具备迈向WAP领域的能力。<BR>另一方面，经过多年的市场和销售工作，中间件企业在企业信息化和电子政务等领域也积累了大量宝贵的客户资源和内网应用系统的开发与整合经验。这些公司往往可以通过广大合作伙伴，建立起一条生态链，把在WAP领域的拓展业务可以很快地挂接在这个链条上。</P>
<P>&nbsp;&nbsp;&nbsp; 三、创新点之一：企业无线信息化</P>
<P>&nbsp;&nbsp;&nbsp; 企业无线信息化是一个全新的领域，将很快会呈现在中间件公司面前。从业内发展来看，很多条件比较好的企事业单位都已经进行了不只一轮的信息化建设，但每次都局限于内部的计算机<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>。随着手机上网的普及，如何把应用拓展到手机上已经成为客户关注的热点。目前很多SI公司正积极地把手机办公等与WAP相关的一些无限模块加入到<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>之中，但这些公司在看到J2ME不能很好的适应该类需求后，又发现很难找到一套行之有效的WAP开发框架。这就是需要中间件厂家们的努力方向！<BR>创新要点：利用企业内部应用整合和平台的“内功”+基于WAP的无线技术“外功”=综合的无线解决方案。某家公司如果能率先切入，完全可以领先开创一套国内技术标准。<BR>按照目前考虑，可以从以下几个具体的方面展开：</P>
<P>&#61548;&nbsp; 企业内部信息化系统的快速WAP接入服务</P>
<P>&nbsp;&nbsp;&nbsp; 利用平台强大的整合能力，提供一套可以快速与目前企业内部已有信息化系统进行整合的解决方案，并通过WAP网站平台把整合的信息实现无线发布和无线交互能力。举例：某矿业生产系统会提供瓦斯报警信号，通过该接入服务后，可以实现瓦斯报警信号直接在第一时间发动到相关负责人手机上。</P>
<P>&#61548;&nbsp; 中间件平台WAP拓展模块</P>
<P>&nbsp;&nbsp;&nbsp; 基于中间件平台，提供WAP拓展，给购买中间件平台的客户增加WAP能力。</P>
<P>&nbsp;&nbsp;&nbsp; 四、创新点之二：WAP平台领域</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:56:25 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件在WAP领域的创新点[2]]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159992.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>企业手机消息平台 
<P>&nbsp;&nbsp;&nbsp; 企业用户都会获得一个信息群发号码代号，企业可以将相同的信息同时群发到客户手机，也可以将不同的信息同时群发到客户手机上。信息群发功能和WAP浏览功能有效的结合起来，可以将公司宣传图片、文字信息或企业WAP门户网址发送给用户，实现信息的定向传递与互动。</P>
<P>&nbsp;&nbsp;&nbsp; 信息平台不仅支持企业群发自己信息到目标用户手机上，还可以接受用户发送的反馈信息，方便企业了解用户的声音。信息交互功能实现了企业与用户的实时沟通，诸如用户对企业产品的意见、对企业品牌的意见等，企业很快就可以获悉。</P>
<P>&#61548;&nbsp; 企业搜索</P>
<P>&nbsp;&nbsp;&nbsp; 用户可通过手机短信与WAP的方式，方便的查询到产品各种信息，实现无限信息最大化传播随时、随地、随身的信息沟通，不受时间、地域的限制，用户随时可以实现信息的获取。</P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>五、创新点之三：行业应用<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG></STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 零售行业解决方案——可以实现短信、wap现场双向互动，简捷直观的大屏幕现场抽奖设置，充分活跃现场气氛，适合进行问题、建议、猜谜等市场问题的调研，调动参与者的积极性，并以此快速掌握客户最新动态。</P>
<P>&nbsp;&nbsp;&nbsp; 餐饮行业应用方案——为饭店建立一个信息中心，对会员进行一些即时的、点对点的信息传递和互动管理，同时对顾客的短信或电子订餐进行搜集、整理，及时反馈，最大可能的留住顾客。</P>
<P>&nbsp;&nbsp;&nbsp; 娱乐行业应用方案——为企业建站会员模式，向会员发送促销活动等消息,向会员发布行业一些最新动态信息，在会员生日、重大节日给会员送祝福，会员可以通过发短信或者wap查询其会员积分。</P>
<P>&nbsp;&nbsp;&nbsp;<STRONG> 六、 总结</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 可以重点关注东方易维等中间件公司的发展方向，例如东方易维的业务中间件已经在平台软件市场拥有了一定数量的市场基础，他们还推出了全新的V5.0产品，目前已经有专门的团队在WAP领域进行了相关技术<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>工作，其WAP产品已经应用在某省移动公司的WAP-OA应用上了。事实表明，该类公司已经向WAP进发，相信在不远的未来，WAP领域的中间产品也会剥茧而出。</P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:55:34 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件TUXEDO在电信计费营帐系统中的应用]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159991.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD class=a14><B><FONT size=2>一、前言</FONT></B></TD></TR></TBODY></TABLE>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD class=a14><FONT size=2>传统的管理信息系统（<STRONG><A href="http://www.ltesting.net/html/09/category-catid-109.html" target="_blank" >MI</A></STRONG>S）<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>采用客户/<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>（CLIENT/SERVER）模式，从体系结构上讲，一般采用两层结构，即应用（客户层）和数据服务层。客户端（应用层）提供用户操作界面，接受数据输入，向数据服务层发出数据请求并接受返回的数据结果，根据业务逻辑进行相关的运算，向客户显示相关信息；数据服务层接受客户端的数据请求，做相关数据处理，并将数据集或数据处理返回客户端。</FONT></TD></TR></TBODY></TABLE>
<TABLE width="100%" align=center>
<TBODY>
<TR>
<TD class=a14><FONT size=2>在现在一些系统中，由于客户机较多，访问量和数据传输量都较大。为解决相应的瓶颈以及出于<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>因素等方面的考虑，往往采用中间件组成三层（多层）结构应用体系（在两层结构应用开发中，常常会编写一些存储过程放在<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>端以供客户端调用，这已经有点类似三层结构）。三层结构应用体系将业务逻辑放在应用服务层，应用服务层接受客户机的业务请求，根据请求访问数据库，做相关处理，将处理结果返回客户机。应用服务层从物理上和逻辑上都可以独立出来，客户机（层）不直接访问数据库服务器（层），而是访问应用服务器（层）。客户层发出的不再是数据请求而是业务（事务）请求。两层与三层结构应用体系的比较如图1所示。
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:53:08 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件在电力信息化中的作用]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159990.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>&nbsp;&nbsp;&nbsp;&nbsp; 电力信息化是指电子信息技术在电力工业应用中全过程的统称，而计算机信息<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>是电力工业信息化的基础。通过多年努力，各级电力企业在发电厂计算机控制、变电站自动化、电网调度自动化、电力负荷管理、管理信息系统、计算机辅助设计、计算机仿真、科研试验等领域有了一定的应用，并在发电厂计算机控制、电网调度自动化方面取得了较高的水平。 <BR><BR>随着电力工业的飞速发展，对电力信息资源的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>提出了更高的要求，信息系统必须利用各种现代化手段为电力工业从规划、建设、生产、交换到消费等全过程的经营活动提供必须的技术基础，为电力工业的科学决策提供服务。 <BR><BR>目前，信息技术的发展已经到了一个崭新的阶段，特别是网络技术的突飞猛进为电力信息化建设提供了强有力的技术保证，各种电力自动化及管理信息系统因为网络技术的支撑而达到了更高的水平。随着各种网络基础设施的完善，建立各种大型分布式处理应用系统的时机已经成熟。此类系统将以其对信息资源的高度共享，高效率、结构灵活、便以扩展等诸多优点更好的满足电力信息化的要求。 <BR><BR>从现有的电力系统的典型应用来看，虽然许多专注于提供电力信息化<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>的集成商已经将其开发的软件产品移至网络结构下，实现了分布式处理。但目前采用的大都是两层的客户/<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>结构，在中间层采用的是<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>厂家提供的分布式解决方案或自己编写的通信程序。随着对各种老应用的不断扩充和新应用的不断增加，各种电力应用系统面临的问题将越来越多，诸如跨过不同厂家的计算机、不同的网络环境、不同的数据库之间互操作、新旧系统并存、系统效率过低，传输不可靠、数据需要加密、各种应用模式、开发周期过长等等问题，这些问题只靠传统的计算机系统软件或工具软件提供的功能已经不能满足要求。这些问题大多是因为网络化或者分布式处理所带来的问题，换句话说，构成网络系统的基础厂商如通信厂家，网络厂家、计算机厂家、数据库厂家等都没能提供一种统一的支持平台，能把不同厂家的各种硬软件资源整合在一起，为电力应用系统的开发提供支持。就象人们在购物时，面临的是名目繁多的小商店而不是一个超市。这么多的问题的确让给开发大型的分布式应用带来了极大的难度。诸如此类的问题使人们发明的中间件。中间件可以很好的解决这些问题。 <BR><BR>既然许多问题是由各种不同的厂商的产品并存所引起的，又不能靠传统的系统软件（如操作系统和数据库等）、工具软件（如各种编程语言等）解决，人们便想用一种另类的软件来解决。顾名思义，你可以把中间件理解成是处在应用软件和系统软件之间的一类软件，或者是独立于硬件或数据库厂商（处在他们中间，实现他们的互连）的一类软件，亦或是客户、服务方之间的连接件，或者是需要进行二次开发的中间产品。实际上，中间件是一种独立的系统软件或服务程序，分布式应用软件借助这种软件在不同的技术之间共享资源，中间件位于客户机服务器的操作系统之上，管理计算资源和网络通讯。 
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:43:59 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[Web服务数据库访问中间件的实现]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159989.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>1&nbsp; 引言<BR>随着Intr<STRONG><A href="http://www.ltesting.net/html/55/category-catid-155.html" target="_blank" >.net</A></STRONG>/Internet<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>的迅猛发展，面向网络的分布式<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>成为支持Internet服务的关键，传统的数据库访问技术已渐渐不能满足分布式应用集成的需要。<BR>【1】利用新技术，研究和<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>新的数据库访问中间件成为数据库研究领域的主要方向之一。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Web服务是一种崭新的分布式计算模型，基于一系列开放的技术标准，其松散耦合、语言中立、平台无关性、开放性使得它将成为下一代电子商务的架构，成为下一代的WWW。<BR>【2】Microsoft.Net提供了基于“.Net框架”的综合开发平台，它提供了涉及客户端、<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>和服务的单独、统一的编程模型。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; “.Net框架”和Visual Studio.Net一起，给我们提供了一个完整的应用程序开发平台。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文主要的工作就是在Visual Studio.Net平台上，利用Web服务将现有的数据库访问方式的封装成中间件，使得封装后的中间件可以满足分布式应用的需要。<BR>&nbsp;<BR>2&nbsp; Web服务中间件接口的定义<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现有通用的数据库访问方式，它的主要操作有：设置数据库连接，打开和关闭数据库， 执行查询和执行其他的Sql语句，实现事务管理和缓冲池管理。比较先进的数据库访问方式还支持实时数据库连接。因此，为了实现对传统数据库访问方式的封装，我们首先要定义一个Web服务，这个Web服务至少应该拥有以上所列的Web方法（属性为WebMethod的public函数成员）。这些方法就组成了这个Web服务的接口。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Net下，Web服务的实现都封装在System.Web.Services.WebService这个类中。为了实现对数据库访问方式的Web服务的封装，我们必须定义一个新的类，它继承于WebService或是它的子类。对于相对简单的Web服务，我们直接让这个类继承于WebService。这个生成的类就成了一个具体的Web服务。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .NET中新的关系型数据管理类都是基于类库中System.Data的一系列的名称空间，通常称这些名称空间集合为ADO.NET。System . Data包含用来访问和存储关系型数据的基础对象。Visual Studio.Net直接给我们提供了System.Data.SqlClient和OleDBClient两个命名空间，这两个命名空间分别包含有用来访问Sql Server关系数据库和其他关系数据库所需的基本对象。其中以Transaction结尾的类提供了事务管理的功能，以Connection结尾的类用于连接具体的数据库。以Command结尾的类定义了对数据库表的操作。
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:41:58 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件为保险行业上“保险”]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159987.html</link>
    <description><![CDATA[<DIV class=key align=left>
<P>&nbsp;</P>关键字：</DIV>
<P><FONT face=Verdana>中国保险业的计算机应用历经十几年的发展，各公司、各地区业已不同程度地进行了全面的业务电子化建设，大部分数据已存入计算机内。随着时间的推移，今天大家都面临信息爆炸的威胁：数据量快速增长，数据有效期长，历史数据积累率高，数据点相对分散，数据集中和共享水平低等一系列的问题暴露在我们面前。大多数信息系统目前尚未建立科学的数据管理体系，多为手工备份、分散管理、无重大灾难恢复能力。长此下去，数据的科学管理、有效应用及<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>问题成为诸多隐患，阻碍了保险业务的发展。 </FONT></P>
<P><FONT face=Verdana>　　中国保险业发展到今天，大多数保险公司除具备核心的业务系统之外，还建立办公自动化系统、财务系统以及相关的一些其他系统，诸如客户服务系统、影像管理系统等等。这些关键IT系统建立在传统的C/S方式和分散的<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>架构中，很难做到数据共享，保证数据被高效地利用。由于数据分散，管理成本加大，存储设备重复投资，利用率低，容易被淘汰。这样的数据架构对于保险公司实现对现有数据的有效应用，诸如商业智能应用(Business Intelligence)、客户关系管理(Customer Relationship Management)、风险管理 (Risk Management)等方面都造成了巨大的障碍，自然也相应地影响了保险业务的发展。</FONT></P><FONT face=Verdana>
<P><BR>　　项目背景</P>
<P><BR>　　由于保险行业的业务特点决定了它对于数据的特定<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>。例如，保险公司需要掌握大量的客户历史数据，并进行有针对性的、具有行业特性的应用，如保险数据仓库的建立、客户历史数据的挖掘、海量数据的快速查询和分析，以实现多方面的业务目标。</P>
<P>　　数据集中是现在各行各业应用系统发展的一大趋势，<STRONG><A href="http://www.ltesting.net/html/01/category-catid-101.html" target="_blank" >金融</A></STRONG>、<STRONG><A href="http://www.ltesting.net/html/02/category-catid-102.html" target="_blank" >电信</A></STRONG>行业由于其发展的较早，经济和技术实力较强，已经走到了前面。金融行业已有许多省份实现了省级的数据集中，移动总局也已经明确提出了省级数据集中的运营模式。在保险行业，由于过去一直采用数据分布的应用模式，如今采用地市级的数据集中应用模式是向更高层次集中的必要尝试和过渡，采用这种过渡方式既可以积累一定的技术经验又能够有效规避风险。</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:36:36 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[软件平台，中间件增值新领域]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159986.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：</DIV><FONT face=Verdana>
<P><BR>软件平台的概念 </P>
<P>我们所说的“软件平台”用一个简单的公式给它定义如下:软件平台=中间件软件+通用业务组件。以中间件为核心的软件平台技术的产生是市场的必然要求，不同于一般国外厂商的基础架构软件,更强调对用户的直接价值。 </P>
<P>对于政府部门的用户而言，软件平台意味着它一开始就应该具有基本的“业务”功能，可以快速地建立起政府的业务应用，业务系统还能进一步地扩展并随业务的变化而方便地调整。归纳起来，对于最终用户而言，软件平台首先意味着基础功能、快速建立和适应变化。市场上有这样的例子，如某个一站式办公软件平台、互联互通软件平台等。 </P>
<P>对于应用<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>商而言，软件的平台化首先意味着开发商把电子政务的业务<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>的一些共性功能已经部分地实现在软件平台中，应用的开发不再是从头开始，可以基于现有软件平台定制，需要新开发的只是一部分应用程序。对于开发商而言，基于软件平台的开发可以有效地减少新代码的开发量，缩短开发周期、减少代码<STRONG><A href="http://www.ltesting.net/" target="_blank" >测试</A></STRONG>的工作量,提高软件的整体<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >可靠性</A></STRONG>，最终降低成本。 </P>
<P>对于中间件等基础软件供应商而言，提供平台化的软件包意味着厂商可能需要组合或集成多种中间件技术，在以中间件为核心的基础架构软件的基础上，向特定应用如电子政务，提供更多的、针对领域的通用化的功能，从而增加软件的附加值，为应用开发商提供更多的帮助。 </P>
<P>软件平台的典型特征 </P>
<P>我们可以把软件平台的典型特征初步地归纳为以下的几个要点。软件平台以中间件为基础，中间件是软件平台的核心支撑系统。软件平台一般是<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>化的应用<STRONG><A href="http://www.ltesting.net/html/81/category-catid-381.html" target="_blank" >解决方案</A></STRONG>，需要基于中间件软件去构建。软件平台是应用系统的核心支撑，整个软件平台需要部署到用户的实际环境中去。 </P>
<P>软件平台具有业务的通用性 </P>
<P>软件平台的中间件层之上是通用的业务构件层。有人把这一层叫做业务基础平台，或者叫领域框架层。这一层软件是针对某一行业或特定类型应用（如电子政务）的通用的软件实现，具有业务的通用性。 </P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:32:33 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[杀毒利器 浅析邮件防病毒中间件]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159985.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：</DIV>
<P><FONT face=Verdana>电子邮件在人们的工作与生活中正在扮演着越来越重要的角色，然而随着病毒制造技术和传播技术的不断发展，电子邮件已经成为病毒传播的最主要温床。愈演愈烈的邮件病毒，对反病毒技术和工具提出了更高的要求，换一条思路，从单纯依靠应用软件（如各种杀毒软件）反病毒，转变为通过<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG>技术反病毒，也未尝不能别开生面。 </FONT></P>
<P><FONT face=Verdana>　　提起邮件防病毒中间件（无毒邮箱中间件），可能普通用户还不太了解；但提起邮件病毒，大家肯定不陌生——前段时间“SCO炸弹”（又叫MyDoom）、“小邮差变种”等病毒在<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>上大肆泛滥，只要是经常上网的用户都会对这些病毒印象深刻。 </FONT></P>
<P><FONT face=Verdana>　　邮件防病毒中间件不为普通用户所知的原因在于，这种产品是最近几年才问世的新产品，应用的时间还不长；另一方面，这种产品只应用在邮件的<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>端，只有系统集成商、邮件服务提供商或者拥有邮件服务器的企业才是它的用户。但是在剿杀邮件病毒的过程中，邮件防病毒中间件却起着至关重要的作用。 </FONT></P>
<P><FONT face=Verdana>　　靠中间件技术筑起<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>堤坝 </FONT></P>
<P><FONT face=Verdana>　　首先解释一下什么是中间件产品，中间件产品属于支撑软件，它是介于操作系统或硬件平台与大型应用软件之间的一种软件，目的是为平台与应用软件之间的数据交换提供高效率的功能调用。而邮件防病毒中间件是利用<STRONG><A href="http://www.ltesting.net/html/00/category-catid-100.html" target="_blank" >嵌入式</A></STRONG>技术，以病毒查杀引擎作为产品内核，对外提供统一的接口以供外部程序调用，为所有操作系统平台下的邮件系统提供保护的一种软件。 </FONT></P>
<P><FONT face=Verdana>　　邮件防病毒中间件工作在系统底层，因此同系统结合的更紧密，从而更加稳定，由于它本身是一种中间件的形式，具有标准的程序接口和协议，能够屏蔽操作系统和网络协议的差异，实现不同硬件和操作系统平台上的数据共享和互操作，从而确保企业设备投资的有效性，并保证其它应用软件的相对稳定和功能扩展。 </FONT></P>
<P><FONT face=Verdana>　　因此，有自主<STRONG><A href="http://www.ltesting.net/ask/" target="_blank" >知识</A></STRONG>产权的软件<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>厂商和系统集成商可以根据自己的需要，只要经过简单的二次开发，便可在自己的邮件系统中嵌入邮件防病毒中间件来实现邮件病毒的检测和清除。 </FONT></P>
<P><FONT face=Verdana>　　四大技术特色带来巨大应用空间 </P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:30:34 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件棋至中盘 Web开发平台之争抬头]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1029/159983.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：</DIV>
<P><FONT face=Verdana>日新月异的Web技术正深刻地改变软件。据国外媒体报道，当前的操作系统时代即将结束，基于Web浏览器的应用将成为计算机行业未来10年的主导。</FONT></P>
<P><FONT face=Verdana>事实上，这一点也不奇怪。自从1991年互联网World Wide Web诞生以来，它就以史无前例的神奇速度成就了Yahoo、eBay、Google等超级企业的非凡成功，更以诸多激动人心的特性改变着人类世界：Email、BBS、网站、搜索、<STRONG><A href="http://www.ltesting.net/ceshi/down" target="_blank" >下载</A></STRONG>、交易、<STRONG><A href="http://blog.ltesting.net/" target="_blank" >博客</A></STRONG>、交友及各种形形色色的应用……</FONT></P>
<P><FONT face=Verdana>如今，说“Web改变世界”这样一个事实人们都会明白和接受。但如果有人告诉你，它要“改变Web”，业界还真吃了一惊。何况，它还一个来自Web技术界的“洼地”中国的厂商。</FONT></P>
<P><FONT face=Verdana>近日，金蝶<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG>公司（Apusic）公开宣称“Web改变世界，我们改变Web”，正式宣布推出“世界最好的Web框架”Apusic OperaMasks，并启动全国巡演。目标直指对Web<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>框架技术有广泛<STRONG><A href="http://www.ltesting.net/html/62/category-catid-162.html" target="_blank" >需求</A></STRONG>的独立软件开发商(ISV)、系统集成商(SI)。</FONT></P>
<P><FONT face=Verdana>在对终于有中国软件厂商敢于引领技术风潮感到惊讶的同时，很多人想问问这个金蝶Apusic何许人也，敢放出这样的“豪言”？相对于被一起列为“基础软件三驾马车”的操作系统、<STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>，在中国人们对中间件还不是那么熟悉。而金蝶Apusic，正是中国中间件的主要厂商之一，特别是在J2EE应用<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>细分市场，已经和两大国际巨头BEA、IBM并列前3。在产品技术方面(J2EE认证)，也已不遑多让。</P>
<P>]]></description>
    <pubDate>Wed, 29 Oct 2008 09:26:40 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件的概念与演变]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1028/159935.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>从Tuxedo、应用<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>，到EAI、构件、<STRONG><A href="http://www.ltesting.net/html/73/category-catid-173.html" target="_blank" >SOA</A></STRONG>，究竟什么才是中间件？<BR>　　<BR><CLK>　　什么是中间件？在一个具体的应用项目之中，到底能不能够不用中间件？这也是中间件厂商经常被问到问题之一。之所以有此一问，说明了用户只是知道了中间件，听说其很重要，但并真正不知道什么是中间件？ </CLK><BR><BR><CLK>　　我们最早知道的中间件是一个称为Tuxedo的东西，实质上它是一个交易中间件。1998年IDC公司对于中间件有一个定义，并根据用途将其划分为6个类别。如今所保留下来的只有消息中间件和交易中间件，其他的已经被逐步融合到其他产品中了，被包裹进去了，在市场上已经没有单独的产品形态出现了。例如，当时有一个叫屏幕数据转换的中间件，其主要是针对</CLK>IBM大机终端而设计产品，用于将IBM大机终端的字符界面转化为用户所喜欢的图形界面，类似的东西当时都称为中间件。但随着IBM大机环境越来越少，但是盛行一时的此类中间件如今已经很少再被单独提及。<BR><BR>　　2000年前后，互联网<CLK>盛行起来，随之产生了一个新的东西，就是应用服务器。实际上，交易中间件也属于是应用服务器，为了区分，人们传统的交易中间件称为分布交易中间件，因它主要应用在</CLK>分布式环境下，而将新的应用服务器，称为J2EE中间件，到目前为止，这都是市场上非常热门的产品。 <BR><BR><CLK>　　EAI概念出来之后，市场上又推出了一些新的软件产品，，例如工作流、Portal等，但从分类上不知道怎么归类，向上不能够划归应用，往下又不能归入操作系统，于是就把它归入了中间件，如此中间件的概念更加扩大了。目前，市场上对于中间件，各家的说法不一，客观上也导致了理解上的复杂性。</CLK><BR>
<P>]]></description>
    <pubDate>Tue, 28 Oct 2008 09:15:02 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[中间件主流技术及其未来发展精解]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1028/159934.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG></DIV>
<DIV id=ArticleCnt>
<P class=main align=left>　　一、概述 </P>
<P class=main>　　1.中间件的概念 </P>
<P class=main><CLK>　　随着计算机技术的飞速发展，各种各样的应用软件需要在各种</CLK>平台之间进行移植，或者一个平台需要支持多种应用软件和管理多种应用系统，软、硬件平台和应用系统之间需要可靠和高效的数据传递或转换，使系统的协同性得以保证。这些，都需要一种构筑于软、硬件平台之上，同时对更上层的应用软件提供支持的软件系统，而中间件正是在这个环境下应孕而生。 </P>
<P class=main>　　由于中间件技术正处于发展过程之中，因此目前尚不能对它进行精确的定义。 </P>
<P class=main><CLK>　　比较流行的定义是：中间件是一种独立的系统软件或服务程序，</CLK>分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/<STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG>的操作系统之上，管理计算资源和<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>通讯。 </P>
<P class=main>　　从中间件的定义可以看出，中间件是一类软件，而非一种软件；中间件不仅仅实现互连，还要实现应用之间的互操作；中间件是基于分布式处理的软件，定义中特别强调了其网络通讯功能。 </P>
<P class=main>　　2.中间件特点及优势 </P>
<P class=main>　　通常意义下，中间件应具有以下的一些特点：满足大量应用的需要；运行于多种硬件和OS平台；支持分布式计算，提供跨网络、硬件和OS平台的透明性的应用或服务的交互功能；支持标准的协议；支持标准的接口。 </P>
<P class=main>　　<STRONG><A href="http://www.ltesting.net/html/78/category-catid-478.html" target="_blank" >程序员</A></STRONG>通过调用中间件提供的大量API，实现异构环境的通讯，从而屏蔽异构系统中复杂的操作系统和网络协议。 </P>
<P>]]></description>
    <pubDate>Tue, 28 Oct 2008 09:12:04 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[国产中间件：SOA是趋势 个性化寻求突破]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1027/159905.html</link>
    <description><![CDATA[<DIV class=key align=left>
<P>&nbsp;</P>关键字：</DIV>
<P><FONT face=Verdana>今年，随着甲骨文并购<STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG>厂商BEA，使得全球软件业整合的趋势日益明显。由于国产软件厂商在中国软件市场占据着一定的优势，那么随着软件产业的整合，中国中间件软件产业是否会受到冲击?单独的中间件厂商是否还有存在的意义?中间件今年的技术趋势如何?中国中间件厂商如何在整合的大潮中生存和发展?</FONT></P>
<P><FONT face=Verdana>　　<STRONG><A href="http://www.ltesting.net/html/73/category-catid-173.html" target="_blank" >SOA</A></STRONG>走俏 国内厂商更务实</FONT></P>
<P><FONT face=Verdana>　　2007年，IBM50亿美元收购Cognos; SAP 68亿美元收购Business Objects; 甲骨文33亿美元收购Hyperion……过去的3年，仅甲骨文一家就耗资约250亿美元收购了33家软件公司。今年年初，甲骨文以85亿美元收购美国商用软件厂商BEA，Sun在同一天也宣布10亿美元收购<STRONG><A href="http://www.ltesting.net/html/3/category-catid-3.html" target="_blank" >开源</A></STRONG><STRONG><A href="http://www.ltesting.net/html/61/category-catid-161.html" target="_blank" >数据库</A></STRONG>厂商<STRONG><A href="http://www.ltesting.net/html/17/category-catid-417.html" target="_blank" >MySQL</A></STRONG>。综合分析这两年国际巨头的并购案例，软件巨头的收购目标也无外乎两大方向——整体性技术融合与专业化市场拓展。</FONT></P>
<P><FONT face=Verdana>　　“其实软件产业的融合始终没有停止过，大鱼吃小鱼的案例从来都不缺乏，甲骨文对于中间件厂商BEA的这次收购对中间件的技术发展没有太大的影响。”中国中间件厂商东方通科技技术总监李春青这样评价。</P>
<P>]]></description>
    <pubDate>Mon, 27 Oct 2008 11:36:02 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>
<item>
    <title><![CDATA[开源中间件模式及应用服务器介绍]]></title>
    <link>http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcskfyy/zjj/2008/1027/159904.html</link>
    <description><![CDATA[<DIV class=key align=left>关键字：<STRONG><A href="http://www.ltesting.net/html/3/category-catid-3.html" target="_blank" >开源</A></STRONG><STRONG><A href="http://www.ltesting.net/html/85/category-catid-385.html" target="_blank" >中间件</A></STRONG> <STRONG><A href="http://www.ltesting.net/html/78/category-catid-378.html" target="_blank" >服务器</A></STRONG></DIV>
<P>&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在过去十年中，基础结构商品软件的主要供应商是ibm、BEA和<STRONG><A href="http://www.ltesting.net/html/16/category-catid-416.html" target="_blank" >Oracle</A></STRONG><CLK>等跨国软件公司。但是，现在的情况完全不同了。开源中间件技术及其服务业正在世界范围内迅速兴起。它像一盏明灯，指引着前进的方向。世界软件业的经营<NOBR oncontextmenu="return false;" onmousemove=kwM(0); id=key0 onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: 0px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">模式</NOBR>正处在发生剧变的前夕。 </CLK></P>
<P>&nbsp;&nbsp;&nbsp; <STRONG>中间件的开源模式</STRONG> </P>
<P>&nbsp;&nbsp;&nbsp; 如今，国际上关于中间件技术的<STRONG><A href="http://www.ltesting.net/html/4/category-catid-4.html" target="_blank" >开发</A></STRONG>思路有两种：企业专有模式与开源开发模式。目前，企业专有开发模式已经取得很大的成绩，例如，BEA公司的<STRONG><A href="http://www.ltesting.net/html/44/category-catid-444.html" target="_blank" >WebLogic</A></STRONG>套件包；IBM公司的<STRONG><A href="http://www.ltesting.net/html/46/category-catid-446.html" target="_blank" >WebSphere</A></STRONG>套件包；还有hp、SUN和Oracle等公司推出的专有中间件产品。 </P>
<P><CLK>&nbsp;&nbsp;&nbsp; 这些为某个企业专有的商品化中间件产品的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >性能</A></STRONG>各有特色，价格往往都十分昂贵，而且这些不同厂商<NOBR oncontextmenu="return false;" onmousemove=kwM(3); id=key3 onmouseover="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">开发</NOBR>的中间件开发工具包，由于其中含有各个厂商的不同专有技术和专利，致使这样开发的各种</CLK>应用系统不易整合，更不易统一管理。 </P>
<P>&nbsp;&nbsp;&nbsp; 在如何发展中间件技术方面，还存在另外一种开发思路，还有另外一种技术实现路线，这就是开源开发模式。 </P>
<P>&nbsp;&nbsp;&nbsp; 中间件的任何一点功能缺失和效率低下，都会冲击到大范围应用系统的正常运行，甚至影响到整个分布<STRONG><A href="http://www.ltesting.net/html/77/category-catid-377.html" target="_blank" >网络</A></STRONG>系统的<STRONG><A href="http://www.ltesting.net/html/04/category-catid-104.html" target="_blank" >安全</A></STRONG>。为了提高中间件的<STRONG><A href="http://www.ltesting.net/html/95/category-catid-95.html" target="_blank" >可靠性</A></STRONG>（含安全性）和系统性能，把隐藏在中间件的直观表象背后的技术思路和实现方案、程序文档和软件源代码全部拿出来，让充分多的人去仔细“审视”，以求发现其中的任何一点“瑕疵”，实为一种“必需”，这就是开源中间件的出发点。　　 </P>
<P>联合一切 </P>
<P><CLK>&nbsp;&nbsp;&nbsp; 当今，开源应用<NOBR oncontextmenu="return false;" onmousemove=kwM(1); id=key1 onmouseover="kwE(event,1, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">服务器</NOBR>有两种，一是JBOSS应用服务器，二是JOnAS应用服务器。但是，这两者的开发思路和所追求的目标却有很大的不同。JOnAS项目为“JAVA开放应用服务器”的缩写，其开发活动由法国ObjectWeb（国际开源中间件</CLK>联盟）所主持。 </P>
<P><CLK>&nbsp;&nbsp;&nbsp; ObjectWeb的<NOBR oncontextmenu="return false;" onmousemove=kwM(10); id=key7 onmouseover="kwE(event,10, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">发展</NOBR>思路是“通过联合做强、做大”，它的雄心是联合一切力</P>
<P>]]></description>
    <pubDate>Mon, 27 Oct 2008 11:34:21 GMT</pubDate>
    <subImagePath>http://www.ltesting.net/images/defaultpic.gif</subImagePath>
     <category>中间件</category>
    <author>秩名</author>
    <comments>领测软件测试网_专业软件测试工程师探讨软件测试技术第一门户</comments>
</item>

</channel>
</rss>
