<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>lylhelin的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=lylhelin</link>
<description>lylhelin的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[[转]JSON简介及其使用]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=33998</link>
<author>lylhelin</author>
<pubDate>2008/4/16 9:14:41</pubDate>
<description><![CDATA[<h3>摘要</h3><p>　　XML——这种用于表示客户端与服务器间数据交换有效负载的格式，几乎已经成了Web
services的同义词。然而，由于Ajax和REST技术的出现影响了应用程序架构，这迫使人们开始寻求`XML的替代品，如：JavaScript
Object Notation（JSON）。</p><p>　　JSON 作为一种更轻、更友好的 Web services客户端的格式（多采用浏览器的形式或访问 REST风格 Web服务的Ajax应用程序的形式）引起了 Web 服务供应商的注意。</p><p>　　本文将阐述JSON在Web services设计中备受推崇的原因，以及它作为XML替代方案的主要优势和局限性。文中还会深入探讨：随着相应的Web 服务客户端选择使用JSON，如何才能便捷地在Java Web services中生成JSON输出。</p><h3>XML的十字路口: 浏览器和 Ajax</h3><p>　
　XML设计原理已经发布了将近十年。时至今日，这种标记语言已经在广阔的软件应用领域中占据了主导地位。从Java、.NET等主流平台中的配置和部署
描述符到应用集成场景中更复杂的应用，XML与生俱来的语言无关性使之在软件架构师心目中占据着独特的地位。但即便最著名的XML权威也不得不承认：在某
些环境中，XML的使用已经超出了它自身能力的极限。</p><p>　　围绕Ajax原理构建的那些Web应用程序最能说明XML的生存能力，从这一点来
看，一种新的有效负载格式的发展壮大也得益于XML。这种新的有效负载格式就是JavaScript Object Notation
(JSON)。在探索这种新的标记语言的复杂性之前，首先来分析一下在这种独特的设计形式中，XML具有哪些局限性。</p><p>　　Ajax建立了一
个用于从远程Web
services发送和接收数据的独立信道，从而允许Web程序执行信道外（out-of-band）客户端/服务器调用。通俗地说，Ajax程序中的更
新和导航序列在典型的客户端/服务器环境之外完成，在后台（即信道外）接受到信息后，必须进行一次完整的屏幕刷新。更多背景信息，请参阅David
Teare的 <a href="http://dev2dev.bea.com.cn/techdoc/2005110103.html">Ajax简介</a>（Dev2Dev）。</p><p>　
　这些应用程序更新通常是通过REST风格（RESTful）Web
services获得的，一旦被用户的浏览器接收到，就需要整合到HTML页面的总体布局之中，这正是XML发挥强大力量的场合。尽管近年来，脚本语言支
持和插件支持已使大多数主流浏览器的功能得到了强化，但许多编程任务依然难于开展，其中之一就是操纵或处理文本，这通常是使用DOM实现的。</p><p>　
　采用DOM的复杂性源于其基于函数的根，这使得对数据树的简单修改或访问都需要进行无数次方法调用。此外，众所周知，DOM在各种浏览器中的实现细节不
尽相同，这一过程将带来极为复杂的编程模式，其跨浏览器兼容性出现问题的可能性极大。接下来的问题显而易见，那就是：如何使一种标记语言轻松集成到
HTML页面中以满足Ajax的要求？</p><p>　　问题的答案就是：利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要
使用DOM之类的机制来访问数据并将数据整合到布局之中，采用这种方法，我们不再使用像XML这样的格式来交付Ajax更新，而是采用一种更为简单直观的
方式，采用JavaScript引擎自然匹配的格式——也就是JSON。</p><p>　　既然已经明确了JSON与XML和Ajax之间的关系，下面将进一步探讨JSON背后的技术细节。</p><h3>JSON剖析：优点和不足</h3><p>　
　对于JSON，首先要明白JSON和XML一样也是一种简单文本格式。相对于XML，它更加易读、更便于肉眼检查。在语法的层面上，JSON与其他格式
的区别是在于分隔数据的字符，JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。下图是一个JSON有效负载：</p><pre class="code">				<font color="#339966">{"addressbook": {"name": "Mary Lebow",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "address": {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "street": "5 Main Street"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "city": "San Diego, CA",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "zip": 91912,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "phoneNumbers": [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "619 332-3452",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "664 223-4667"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ] }}</font>		</pre><p>　　将上面的JSON有效负载用XML改写，如下：</p><pre class="code">				<font color="#339966">&lt;addressbook&gt; &lt;name&gt;Mary Lebow&lt;/name&gt; &lt;address&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;street&gt;5 Main Street&lt;/street&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;city zip="91912"&gt; San Diego, CA &lt;/city&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;phoneNumbers&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;phone&gt;619 332-3452&lt;/phone&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;phone&gt;664 223-4667&lt;/phone&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/phoneNumbers&gt; &lt;/address&gt;&lt;/addressbook&gt;</font>		</pre><p>　　是不是很相似？但它们并不相同。下面将详细阐述采用JSON句法的优点和不足。</p><h4>优点 </h4><p>　　乍看上去，使用JSON的数据分隔符的优点可能并不那么明显，但存在一个根本性的缘由：它们简化了数据访问。使用这些数据分隔符时， JavaScript引擎对数据结构（如字符串、数组、对象）的内部表示恰好与这些符号相同。</p><p>　　这将开创一条比DOM技术更为便捷的数据访问途径。下面列举几个JavaScript代码片段来说明这一过程，这些代码片段会访问先前的JSON代码片段中的信息：</p><ul><li>访问JSON中的名称： addressbook.name </li><li>访问JSON中的地址： addressbook.address.street </li><li>访问JSON中的电话号码第一位：addressbook.address.phoneNumbers[0] </li></ul><p>　　如果您具备DOM编程经验，就能很快地看出区别；新手可以参看 <a href="http://www.w3.org/TR/DOM-Level-3-Core/introduction.html" target="_blank">Document Object Model</a> 的这一外部资源，这里提供了关于数据导航的实例。</p><p>　
　JSON的另一个优点是它的非冗长性。在XML中，打开和关闭标记是必需的，这样才能满足标记的依从性；而在JSON中，所有这些要求只需通过一个简单
的括号即可满足。在包含有数以百计字段的数据交换中，传统的XML标记将会延长数据交换时间。目前还没有正式的研究表明JSON比XML有更高的线上传输
效率；人们只是通过简单的字节数比较发现，对于等效的JSON和XML有效负载，前者总是小于后者。至于它们之间的差距有多大，特别是在新的XML压缩格
式下它们的差距有多大，有待进一步的研究。</p><p>　　此外，JSON受到了擅长不同编程语言的开发人员的青睐。这是因为无论在<em>Haskell</em>中或 <em>Lisp</em>中，还是在更为主流的C#和PHP中，开发都可以方便地生成JSON（详见 参考资料）。</p><h4>不足</h4><p>　
　和许多好东西都具有两面性一样，JSON的非冗长性也不例外，为此JSON丢失了XML具有的一些特性。命名空间允许不同上下文中的相同的信息段彼此混
合，然而，显然在JSON中已经找不到了命名空间。JSON与XML的另一个差别是属性的差异，由于JSON采用冒号赋值，这将导致当XML转化为
JSON时，在标识符（XML CDATA）与实际属性值之间很难区分谁应该被当作文本考虑。</p><p>　　另外，JSON片段的创建和验证过程比一般的XML稍显复杂。从这一点来看，XML在开发工具方面领先于JSON。尽管如此，为了消除您对这一领域可能存在的困惑，下节将介绍一些最为成熟的JSON开发。</p><h3>从Web services生成JSON输出</h3><p>　
　既然JSON的首要目标是来自浏览器的信道外请求，那么我们选择REST风格（RESTful）Web服务来生成这些数据。除了用典型业务逻辑探究
Web服务之外，还将采用特定的API把本地Java结构转化为JSON格式（详见 参考资料）。首先，下面的Java代码用来操纵Address对象：</p><pre class="code">// Create addressbook data structureSortedMap addressBook = new TreeMap();<font color="#339966">// Create new address entries and place in Map // (See download for Address POJO structure)Address maryLebow = new Address("5 Main Street","San Diego, CA",91912,"619-332-3452","664-223-4667"); addressBook.put("Mary Lebow",maryLebow);Address amySmith = new Address("25 H Street","Los Angeles, CA",95212,"660-332-3452","541-223-4667"); addressBook.put("Sally May",amySmith);Address johnKim = new Address("2343 Sugarland Drive","Houston, TX",55212,"554-332-3412","461-223-4667"); addressBook.put("John Kim",johnKim);Address richardThorn = new Address("14 68th Street","New York, NY",,12452,"212-132-6182","161-923-4001"); addressBook.put("Richard Thorn",richardThorn);</font></pre><p>　　该Java结构在哪里生成并不重要（可能是在JSP、Servlet、EJB或POJO中生成），重要的是，在REST风格Web 服务中有权使用这些数据。如下示：</p><pre class="code">				<font color="#339966">// Define placeholder for JSON responseString result = new String();// Get parameter (if any) passed into application String from = request.getParameter("from");String to = request.getParameter("to");try { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Check for parameters, if passed filter address book &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(from != null &amp;&amp; to != null) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Filter address book by initial &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addressBook = addressBook.subMap(from,to);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Prepare the convert addressBook Map to JSON array &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Array used to place numerous address entries &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONArray jsonAddressBook = new JSONArray(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Iterate over filtered addressBook entries &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Iterator iter = addressBook.entrySet().iterator(); iter.hasNext();)&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get entry for current iteration&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map.Entry entry = (Map.Entry)iter.next();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String key = (String)entry.getKey();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address addressValue = (Address)entry.getValue();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Place entry with key value assigned to "name" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject jsonResult = new JSONObject();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonResult.put("name",key);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get and create address structure corresponding to each key &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // appending address entry in JSON format to result &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String streetText = addressValue.getStreet();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String cityText = addressValue.getCity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int zipText = addressValue.getZip();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONObject jsonAddress = new JSONObject();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonAddress.append("street",streetText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonAddress.append("city",cityText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonAddress.append("zip",zipText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonResult.put("address",jsonAddress);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get and create telephone structure corresponding to each key &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // appending telephone entries in JSON format to result &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String telText = addressValue.getTel();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String telTwoText = addressValue.getTelTwo();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSONArray jsonTelephones = new JSONArray();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonTelephones.put(telText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonTelephones.put(telTwoText);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonResult.put("phoneNumbers",jsonTelephones);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Place JSON address entry in global jsonAddressBook &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonAddressBook.put(jsonResult);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } // end loop over address book &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Assign JSON address book to result String&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = new JSONObject().put("addressbook",jsonAddressBook).toString();&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Error occurred&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }</font>		</pre><p>　
　为了便于说明，我们已将这段代码将置入JSP（restservice.jsp)中。如果它真是一段程序，那么类似这样的代码也会出现在servlet
或helper类中。
REST风格Web服务首先提取两个通过URL请求传递给它的输入参数，根据这些值过滤现有的地址簿以适应请求。过滤过地址簿后，即可开始循环检查
Java映射中的每个条目。</p><p>　　您会注意到，在循环内部，json.org
API被广泛用于将本地Java格式转化为JSON字符串。虽然仅使用了少量类（即JSONArray和JSONObject），但API提供的转换方法
相当广泛，甚至能将XML结构转换成JSON输出。但回到我们的Web服务，一旦循环遍历了所有条目，那么变量“result”会包含准备返回给请求方的
地址簿的JSON同等部分。</p><p>　　既然已经生成了JSON输出，下面来看看等式的另一边：浏览器应用程序中JSON有效负载的使用。</p><h3>JSON有效负载的使用</h3><p>　
　作为基于浏览器的客户端，我们的设计中大部分工作都是在HTML、JavaScript加上附加的JavaScript
框架下完成的。例如利用Prototype库轻松创建跨浏览器样式的Ajax调用。下面的清单包含了我们的应用程序的第一部分，以及相应的
JavaScript函数。</p><pre class="code">				<font color="#339966">&lt;html&gt; &lt;head&gt; &lt;title&gt; JSON Address Book &lt;/title&gt; &lt;script type="text/javascript" src="prototype-1.4.0.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; // Method invoked when user changes letter rangefunction searchAddressBook() {&nbsp;&nbsp;&nbsp;&nbsp; // Select values from HTML select lists&nbsp;&nbsp;&nbsp;&nbsp; var fromLetter = $F('fromLetter');&nbsp;&nbsp;&nbsp;&nbsp; var toLetter = = $F('toLetter');&nbsp;&nbsp;&nbsp;&nbsp; // Prepare parameters to send into REST web service&nbsp;&nbsp;&nbsp;&nbsp; var pars = 'from=' + fromLetter + '&amp;to=' + toLetter;&nbsp;&nbsp;&nbsp;&nbsp; // Define REST web service URL &nbsp;&nbsp;&nbsp;&nbsp; var url = 'restservice.jsp';&nbsp;&nbsp;&nbsp;&nbsp; // Make web service Ajax request via prototype helper, &nbsp;&nbsp;&nbsp;&nbsp; // upon response, call showResponse method&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; new Ajax.Request( url, { method: 'get', parameters: pars, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; onComplete: showResponse });}&lt;/script&gt; &lt;/head&gt;</font>		</pre><p>　
　首先导入了prototype库，该库用于促进对REST风格Web服务的Ajax调用。接下来是searchAddressBook()函数，当用户
修改其下所示的HTML选择列表时，将会触发此函数。该函数被触发后，用户将会获得HTML选择列表中已选中的选项，并将其放入两个用于过滤地址簿的变量
中，随后定义一个指向REST风格服务URL restservice.jsp的附加变量。</p><p>　　此方法中还包括借助原型函数new
Ajax.Request( url, { method: 'get', parameters: pars, onComplete:
showResponse }); 的实际Ajax
Web服务调用；表明了对相关URL的一个请求，其请求参数包含在pars中；最后一旦Ajax请求终止，即执行showResponse()。</p><p>　　下面以showResponse()为例说明用于评估JSON有效负载并将其放入HTML主体布局环境中的的必要代码。</p><pre class="code">				<font color="#339966">// Method invoked when page receives Ajax response from REST web service function showResponse(originalRequest) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Get JSON values &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonRaw = originalRequest.responseText;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Eval JSON response into variable &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonContent = eval("(" + jsonRaw + ")");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create place holder for final response&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finalResponse = "&lt;b&gt;" + jsonContent.addressbook.length + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " matches found in range&lt;/b&gt;&lt;br/&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Loop over address book length.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (i = 0; i &lt; jsonContent.addressbook.length; i++) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finalResponse += "&lt;hr/&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finalResponse += "&lt;i&gt;Name:&lt;/i&gt; " + jsonContent.addressbook[i].name + "&lt;br/&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finalResponse += "&lt;i&gt;Address:&lt;/i&gt; " + jsonContent.addressbook[i].address.street + " -- " + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonContent.addressbook[i].address.city + "," +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonContent.addressbook[i].address.zip + ".&lt;br/&gt;";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finalResponse += "&lt;i&gt;Telephone numbers:&lt;/i&gt; " + jsonContent.addressbook[i].phoneNumbers[0] + " &amp; " + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jsonContent.addressbook[i].phoneNumbers[1] + ".";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Place formatted finalResponse in div element&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.getElementById("addressBookResults").innerHTML = finalResponse; }</font>		</pre><p>　
　此方法的输入参数是REST风格Web服务在调用时返回的响应。既然预先已经知道需要处理JSON字符串，那么可以利用JavaScript
eval()函数，将这个JSON字符串放入内存，并允许数据访问，正是这样的简便性促使开发人员使用JSON。完全不需要进行解析，一个简单的eval
()即可得到JavaScript结构，我们可以像操纵其他任何JavaScript结构一样地去操纵它。</p><p>　　一旦JSON响应经过
eval处理，将创建一个JavaScript循环来提取每个地址条目，并将各个匹配项放入一个名为finalResponse的容器变量中。而这个容器
变量本身包含所有必要的格式，用于在页面布局中显示最终地址簿。循环结束时，匹配项也通过document.getElementById
("addressBookResults").innerHTML放置完毕。</p><p>　　最后，为了保持完整，页面的实际布局由这些代码组成：</p><pre class="code">				<font color="#339966">&lt;body&gt; &lt;h4 style="text-align:left"&gt;Request address book matches:&lt;/h4&gt;&lt;table style="text-align:left" cellpadding="15"&gt;&lt;tr&gt;&lt;td valign="top"&gt;From:&lt;br/&gt;&lt;select id="fromLetter" size="15" onchange="searchAddressBook()"&gt; &lt;option&gt;A&lt;/option&gt; ... &lt;option&gt;Z&lt;/option&gt;&lt;/select&gt;&lt;/td&gt;&lt;td valign="top"&gt;To:&lt;br/&gt;&lt;select id="toLetter" size="15" onchange="searchAddressBook()"&gt; &lt;option&gt;A&lt;/option&gt; ... &lt;option&gt;Z&lt;/option&gt;&lt;/select&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;h5&gt; Results &lt;/h5&gt; &lt;div style="text-align:left" id="addressBookResults"&gt;Please select range&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/body&gt; </font>		</pre><p>　
　上面的代码清单中最值得一提的是HTML选择列表，因为修改触发器Java程序需要调用信道外Ajax请求。其次，&lt;div&gt;元素就是放置
格式化后的JSON响应的地方。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><h3>JSON适合您吗</h3><p>　　就像在软件设计中编程语言的选择一样，JSON的选择与否取决于您自身的需求。如果Web services<em>使用者</em>将
在传统、功能完备的编程环境（如Java
、.NET、PHP、Ruby等）中创建，那么完全可以不使用JSON。给定大多数编程语言环境的无限制能力可提供完整的配置控制权（更不必说对定制库、
分析器或helper类的访问），那么JSON与XML及其他Web services有效载荷之间的差别可以忽略不计。</p><p>　　反之，如果Web services<em>使用者</em>被
限制在浏览器环境之外，那么JSON是值得认真考虑的对象。 在浏览器中使用Web
services并非兴趣使然，而是实际业务需求。如果这时需要一个加载数据时不会出现延迟/刷新的“漂亮的Web 2.0界面”，
就不得不在浏览器中嵌入Ajax和Web services技术。</p><p>　　在这种情况下，您不仅受限于通过网络访问处理环境，而且还会受到随机用户的限制，迫使经验丰富的开发人员用最普遍的工具在浏览器中处理文本，例如：前述的DOM，与访问JSON树相比，DOM使用起来非常困难。</p><h3>示例代码</h3><p>　　您可下载与本文相关的代码。</p><ul><li><a href="http://dev2dev.bea.com/2007/02/json_addressbook.zip" target="_blank">json_addressbook.zip</a> ——示例代码和实用工具 </li></ul><p>　
　安装之前先解压下载得到的文件，将addressbook.html,prototype-1.4.0.js和restservice.jsp放入任意
程序的目录下。将内含的json.jar复制到所选程序的/WEB-INF/lib目录下。访问&lt;yourhost&gt;/&lt;
yourappdir&gt;/addressbook.html，并在HTML列表中进行选择。一切就绪，可以运行JSON了！</p><h3>结束语</h3><p>　　尽管 “Ajax”中的“x”代表XML，Web services也通过坚持使用XML格式而成为主流，但这并不意味着这种方式无懈可击。在文本处理方面，XML在Ajax程序的应用中已经暴露出一些缺点。在这种情形下，JSON逐渐成为引人注目的XML替代方案。</p><p>　
　通过对JSON语法优缺点的论述，以及对如何从REST风格Web
services创建JSON输出、如何将其嵌入Web页面布局等问题的介绍，您现在应该能够为最终用户提供支持JSON的Web
services，接触当前提供的大量利用这一极具前途的格式的Web services。</p><h3>参考资料</h3><ul><li><a href="http://dev2dev.bea.com.cn/techdoc/2005110103.html">Ajax简介</a>（David Teare，Dev2Dev，2005年8月）——介绍Ajax的相关技术背景 </li><li><a href="http://www.json.org/java/index.html" target="_blank"><font color="#800080">JSON in Java </font></a>——介绍使用Java API将本地Java结构转换成JSON输出 </li><li><a href="http://prototype.conio.net/" target="_blank">Prototype</a> ——介绍用于创建Ajax应用程序的JavaScript框架 </li><li><a href="http://www.json.org/java/index.html" target="_blank"><font color="#800080">JSON.org </font></a>——JSON主页，其中包含可生成JSON的各种语言库的资源和链接 </li></ul><div class="dot001"><img src="http://dev2dev.bea.com.cn/images/_.gif" alt="" height="1" width="100%">&nbsp;</div><br><br><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2036870</p>]]></description>
</item><item>
<title><![CDATA[敏捷软件开发模型--SCRUM]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=33269</link>
<author>lylhelin</author>
<pubDate>2008/3/31 15:41:25</pubDate>
<description><![CDATA[<A>　
<P>摘自：</A><A href="http://www.cnblogs.com/fanjunhan/articles/57760.html">http://www.cnblogs.com/fanjunhan/articles/57760.html</A><A></P>
<P>SCRUM方法如下：</P>
<P>由Ken Schwaber和 Jeff Sutherland 提出，旨在寻求充分发挥面向对象和构件技术的开发方法，是对迭代式面向对象方法的改进，名称来自英式橄榄球（在比赛中每个队员都应时刻保持对场上全局的判断，然后通过集体行动，奋力实现同一目标──胜利）。SCRUM方法最初实践于Easel公司(1993年)，现已被数十家公司数百个项目开发中应用，适用于需求难以预测的复杂商务应用产品的开发[11]。SCRUM提出的SCRUM Meeting、Sprint、Backlog、SCRUM Master、SCRUM Team、Demo等模式已被PLOP作为组织和过程模式（Organizational and Process Pattern）的标准[12]。<BR>SCRUM将工业过程控制中的概念应用到软件开发中来，认为软件开发过程更多是经验性过程(Empirical Process)，而不是确定性过程(Defined Process)。确定性过程是可明确描述的、可预测的过程，因而可重复（Repeatable）执行并能产生预期的结果，并能通过科学理论对其最优化。经验性过程与之相反，应作为一个黑箱（Black box）来处理，通过对黑箱的输入输出不断进行度量，在此基础上，结合经验判断对黑箱进行调控，使其不越出设定的边界，从而产生满意的输出。SCRUM方法将传统开发中的分析、设计、实施视为一个黑箱，认为应加强黑箱内部的混沌性，使项目组工作在混沌的边沿，充分发挥人的创造力。如将经验性过程按确定性过程来处理（如瀑布模型），必将使过程缺乏适应力。<BR>3.2.1 SCRUM方法的开发过程<BR>包括三个过程：<BR>(1) 计划和体系结构设计（确定性过程）<BR>将Backlog（急待完成的一系列任务，包括：未细化的产品功能要求、Bugs、缺陷、用户提出的改进、具竞争力的功能及技术升级等）按优先级排序形成Backlog 列表，根据该表和风险评估制订产品交付基线。<BR>建立系统体系结构（如为已有系统改进，则只作有限分析、调整），将Backlog项按高内聚低耦合的原则分解为一系列问题包(Packets,每个Packet是一组对象或构件的集合) ，依据同样原则相应划分若干个开发小组（SCRUM 小组）,分配各小组合适的Backlog项或问题包。建立开发运行环境。 <BR>(2) Sprint（经验性过程）<BR>该过程由若干个迭代的冲刺(Sprint) 活动组成，直至风险评估认为产品可交付为止。一个Sprint是在限定时间段内（Sprint周期，通常为1~6周，可在前一个Sprint结束时调整）的一系列开发活动（包括分析、设计、编码、测试等），每个SCRUM小组并行开发且必须步调一致（在一个Sprint结束后，均须完成所分配的Backlog项并有可执行的产出）。<BR>每个Sprint包含以下活动：<BR>l 开发。对分配的Backlog工作进行分析，将所需改动（changes）映射到各packets，打开packets,进行领域分析，然后设计、开发、实施、测试、文档化这些改动。<BR>l 打包(Wrap)。封装packets,产生一个满足Backlog需求的可执行版本。<BR>l 评审（Review）。所有的SCRUM小组一起开会，提交各自的工作并演示(Demo)，然后提出和解决问题(Issue)及难点（problem）,增加新的Backlog项；发布、审查或调整产品的标准规范；进行风险评估并提出合适的对策；确定下一个Sprint的工作内容和结束时间。<BR>l 调整（Adjust）。根据评审会汇集的信息，对受影响的Packets进行适当调整和巩固。<BR>(3) 交付和巩固（确定性过程）<BR>一旦根据风险评估结果认为可交付产品时，即进入该阶段。该阶段的活动包括：组装，系统测试和回归测试（Regression），准备培训材料，完成最终文档。<BR>SCRUM过程认为一个产品的开发将一直持续下去，除非经风险评估后认为应停止。产品交付后的巩固活动类似于传统方法中的维护和改善，目的在于整理Sprint期压力下忽略的工作，为下一阶段的开发做准备，以便轻装上阵。<BR>3.2.2 SCRUM对过程的管理：<BR>(1) SCRUM的控制手段。<BR>SCRUM提出了八个控制项（Controls）用于开发过程的调控，其中风险控制是首要的手段。<BR>l Backlog。<BR>l 对象/构件。<BR>l Packets。<BR>l 变动（Changes）。实施一个Backlog项时，对相应Packet的改动。<BR>l 难点（Problems）。实施一个变动时所必须解决的技术难点。<BR>l 问题（Issues）。涉及到整个项目或在Backlog项分解到Packet之前须解决的问题。<BR>l 措施（Solutions）。对问题或难点的解决，通常会导致变动。<BR>l 风险（Risks）。影响项目成功的风险，应持续跟踪评估并相应做出调整。风险评估的结果将影响其他所有控制项。SCRUM定义了六个概念性变量来用于风险评估：用户需求，时间压力，竞争，质量，远见（vision）和可用资源。<BR>在SCRUM的各个阶段都使用这些控制项来评估和权衡，管理人员侧重于以此管理Backlog，开发组用以处理变动和难点。所有人员一起来管理问题、风险和措施。<BR>根据对控制项特别是风险的不断度量评估和权衡，一方面，计划和进度（在每个Sprint结束时）不断相应调整，保证实现产品的商务目标；另一方面，对开发中的工作任务Backlog动态地进行优先级排序，开发组总是先开发优先级最高的Backlog项，这样就保证了资源的最合理使用。另外，SCRUM强调度量（采用标准功能点度量方法）的重要性，通过对每个Sprint中生产率等的度量，计划和进度将越来越趋于准确。<BR>(2) 项目组织。<BR>项目组由全职开发人员及与该交付产品有关的市场人员、销售人员、用户等组成。设以下小组：<BR>l 项目管理组。由产品经理领衔，包括总设计师，各SCRUM小组组长，市场、销售的高级职员及典型用户等。<BR>l 若干个SCRUM小组。各小组由组长（SCRUM Master）领衔。每个小组都是跨专业的（通常包括开发人员，文档人员，质量控制人员或用户代表等），通常为3~7人，以使小组内有充分的交流。小组的划分最好是功能导向的（按所分配的问题包或Backlog），也可是系统层次导向（按体系结构中的分层）。.<BR>在项目组人数增大时，可在管理组之上再设管理组（SCRUM of SCRUM）,从而使SCRUM方法的应用到大项目中。<BR>(3) Sprint期间的调控。<BR>在Sprint期间，应使各SCRUM小组尽量避免外界的干扰（不可将新的Backlog任务加进来，组内产生的Backlog可放到整个项目的Backlog列表中，也可在本次Sprint中解决），使小组成员专心于目前的工作，使他们工作在混沌的边沿。<BR>为避免项目组在Sprint期间不陷入混乱，SCRUM采取两个措施:<BR>l SCRUM会议（SCRUM Meeting）。对小组行为进行监控和刺激。会议在Sprint期间每天在同一地点举行，由SCRUM Master主持。会议上，SCRUM Master对每个小组成员提三个问题：<BR>1） 昨天的工作进展如何。 <BR>2） 有否遇到困难和障碍。<BR>3） 今天的工作打算。<BR>会后SCRUM Master集中精力排除障碍，小组成员则进行当天的开发。<BR>l Sprint评审会议。评审后根据对每人的工作成绩，进行相应的激励。<BR>3.2.3 SCRUM方法的实践效果和发展方向：<BR>SCRUM在实践中大大提高了生产率（据软件生产率组织的Capers Jones称可提高6倍），在实施中有一个"间断平衡"（Punctuated equilibrium）现象（类似于自然界中物种的进化，在经过一段相对平衡的各自独立、并行的发展期后，在交汇处发生变异），即在经过紧张、并行的Sprint开发后，在Sprint评审时，软件产品产生较剧烈的变化。SCRUM方法的最近动向是设法借鉴XP方法。</P></A>]]></description>
</item><item>
<title><![CDATA[JSP中的page,request,session,application（转）]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=33268</link>
<author>lylhelin</author>
<pubDate>2008/3/31 15:15:21</pubDate>
<description><![CDATA[<A>　
<DIV class=from_info>http://www.webjx.com
<SCRIPT language=javascript src="/ad/js/articletop_ad.js"></SCRIPT>
</DIV>
<DIV class=text_body>　　application和session比较简单，这里主要说明request和page的作用范围。 
<P>&nbsp;&nbsp;&nbsp; application：全局作用范围，整个应用程序共享，就是在部署文件中的同一个webApp共享，生命周期为：应用程序启动到停止。</P>
<P>&nbsp;&nbsp;&nbsp; session：会话作用域，当用户首次访问时，产生一个新的会话，以后服务器就可以记住这个会话状态。生命周期：会话超时，或者服务器端强制使会话失效。</P>
<P>&nbsp;&nbsp;&nbsp; request：请求作用域，就是客户端的一次请求。</P>
<P>&nbsp;&nbsp;&nbsp; page：一个JSP页面。</P>
<P>&nbsp;&nbsp;&nbsp; 以上作用范围使越来越小， request和page的生命周期都是短暂的，他们之间的区别就是：一个request可以包含多个page页(include，forward以及filter)。举个简单的例子：</P>
<P>&nbsp;&nbsp;&nbsp; jsp1.jsp<BR>&lt;jsp:useBean id="beanID" class＝"xxx .xxx.BeanClass" scope="request" /&gt;<BR>&lt;jsp:include page="jsp2.jsp" /&gt;&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp;&nbsp;&nbsp; jsp2.jsp<BR>&lt;jsp:getProperty name="beanID" property="sample" /&gt;</P>
<P><BR>&nbsp;&nbsp;&nbsp; 运行jsp1.jsp可以正常显示数据，因为作用范围是request，相当于调用了request.setAttribute()方法，jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.</P>
<P>&nbsp;&nbsp;&nbsp; 一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别 &lt;jsp:include&gt; 和&lt;%@ include %&gt;.如果上面的&lt;jsp:include page="jsp2.jsp" /&gt;改为&lt;%@ include file="jsp2.jsp" %&gt;,即使scope为page也是正确的,&lt;%@ include %&gt;是编译时包含,&lt;jsp:include&gt;是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回.</P></DIV></A>]]></description>
</item><item>
<title><![CDATA[Cookie，httpsession类使用概述（转）]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=33267</link>
<author>lylhelin</author>
<pubDate>2008/3/31 14:56:24</pubDate>
<description><![CDATA[<A>　
<TABLE class=rtable width="98%" border=0>
<TBODY>
<TR>
<TD class=text align=left width="100%"><BR>Cookie&nbsp;是一小块可以嵌入HTTP&nbsp;请求和响应中的数据，它在服务器上产生，并作为响应头域的一部分返回用户。浏览器收到包含Cookie&nbsp;的响应后，会把Cookie&nbsp;的内容用“关键字/值”&nbsp;对的形式写入到一个客户端专为存放Cookie&nbsp;的文本文件中。浏览器会把Cookie&nbsp;及随后产生的请求发给相同的服务器，服务器可以再次读取Cookie&nbsp;中存Cookie&nbsp;可以进行有效期设置，过期的Cookie&nbsp;不会发送给服务器。<BR><BR><BR><BR>　　Servlet&nbsp;API&nbsp;提供了一个Cookie&nbsp;类，封装了对Cookie&nbsp;的一些操作。Servlet&nbsp;可以创建一个新的Cookie，设置它的关键字、值及有效期等属性，然后把Cookie&nbsp;设置在HttpServletResponse&nbsp;对象中发回浏览器，还可以从HttpServletRequest&nbsp;对象中获取Cookie。<BR><BR>　　编程思路：Cookie&nbsp;在实际的Servlet&nbsp;编程中是很广泛应用，下面是一个从Servlet&nbsp;中获取Cookie&nbsp;信息的例子。<BR><BR>　　ShowCookies.java&nbsp;的源代码如下：<BR><BR>import&nbsp;javax.servlet.*;<BR>import&nbsp;javax.servlet.http.*;<BR><BR>/**<BR>*&nbsp;＜p＞This&nbsp;is&nbsp;a&nbsp;simple&nbsp;servlet&nbsp;that&nbsp;displays&nbsp;all&nbsp;of&nbsp;the<BR>*&nbsp;Cookies&nbsp;present&nbsp;in&nbsp;the&nbsp;request<BR>*/<BR><BR>public&nbsp;class&nbsp;ShowCookies&nbsp;extends&nbsp;HttpServlet<BR>{<BR>　public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;req,&nbsp;HttpServletResponse&nbsp;resp)<BR>　throws&nbsp;ServletException,&nbsp;java.io.IOException<BR>　{<BR><BR>　　//&nbsp;Set&nbsp;the&nbsp;content&nbsp;type&nbsp;of&nbsp;the&nbsp;response<BR>　　resp.setContentType("text/html;charset=gb2312");<BR><BR>　　//&nbsp;Get&nbsp;the&nbsp;PrintWriter&nbsp;to&nbsp;write&nbsp;the&nbsp;response<BR>　　java.io.PrintWriter&nbsp;out&nbsp;=&nbsp;resp.getWriter();<BR><BR>　　//&nbsp;Get&nbsp;an&nbsp;array&nbsp;containing&nbsp;all&nbsp;of&nbsp;the&nbsp;cookies<BR>　　Cookie&nbsp;cookies[]&nbsp;=&nbsp;req.getCookies();<BR><BR>　　//&nbsp;Write&nbsp;the&nbsp;page&nbsp;header<BR>　　out.println("＜html＞");<BR>　　out.println("＜head＞");<BR>　　out.println("＜title＞Servlet&nbsp;Cookie&nbsp;Information＜/title＞");<BR>　　out.println("＜/head＞");<BR>　　out.println("＜body＞");<BR><BR>　　if&nbsp;((cookies&nbsp;==&nbsp;null)&nbsp;||&nbsp;(cookies.length&nbsp;==&nbsp;0))&nbsp;{<BR>　　　out.println("没有&nbsp;cookies&nbsp;");<BR>　　}<BR>　　else&nbsp;{<BR>　　　out.println("＜center＞＜h1＞响应消息中的Cookies&nbsp;信息&nbsp;＜/h1＞");<BR>　　　//&nbsp;Display&nbsp;a&nbsp;table&nbsp;with&nbsp;all&nbsp;of&nbsp;the&nbsp;info<BR>　　　out.println("＜table&nbsp;border＞");<BR>　　　out.println("＜tr＞＜th＞Name＜/th＞＜th＞Value＜/th＞"&nbsp;+&nbsp;"＜th＞Comment＜/th＞＜th＞Max&nbsp;Age＜/th＞＜/tr＞");<BR>　　　for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;＜&nbsp;cookies.length;&nbsp;i++)&nbsp;{<BR>　　　　Cookie&nbsp;c&nbsp;=&nbsp;cookies;<BR>　　　　out.println("＜tr＞＜td＞"&nbsp;+&nbsp;c.getName()&nbsp;+&nbsp;"＜/td＞＜td＞"&nbsp;+<BR>　　　　c.getValue()&nbsp;+&nbsp;"＜/td＞＜td＞"&nbsp;+&nbsp;c.getComment()&nbsp;+&nbsp;"＜/td＞＜td＞"&nbsp;+&nbsp;c.getMaxAge()&nbsp;+&nbsp;"＜/td＞＜/tr＞");<BR>　　}<BR>　　out.println("＜/table＞＜/center＞");<BR>　}<BR>　//&nbsp;Wrap&nbsp;up<BR>　out.println("＜/body＞");<BR>　out.println("＜/html＞");<BR>　out.flush();<BR>}<BR><BR>/**<BR>*&nbsp;＜p＞Initialize&nbsp;the&nbsp;servlet.&nbsp;This&nbsp;is&nbsp;called&nbsp;once&nbsp;when&nbsp;the<BR>*&nbsp;servlet&nbsp;is&nbsp;loaded.&nbsp;It&nbsp;is&nbsp;guaranteed&nbsp;to&nbsp;complete&nbsp;before&nbsp;any<BR>*&nbsp;requests&nbsp;are&nbsp;made&nbsp;to&nbsp;the&nbsp;servlet<BR>*&nbsp;@param&nbsp;cfg&nbsp;Servlet&nbsp;configuration&nbsp;information<BR>*/<BR><BR>public&nbsp;void&nbsp;init(ServletConfig&nbsp;cfg)<BR>throws&nbsp;ServletException<BR>{<BR>　super.init(cfg);<BR>}<BR><BR>/**<BR>*&nbsp;＜p＞Destroy&nbsp;the&nbsp;servlet.&nbsp;This&nbsp;is&nbsp;called&nbsp;once&nbsp;when&nbsp;the&nbsp;servlet<BR>*&nbsp;is&nbsp;unloaded.<BR>*/<BR><BR>public&nbsp;void&nbsp;destroy()<BR>{<BR>　super.destroy();<BR>}<BR>}<BR><BR><BR>　　注意：Cookie&nbsp;进行服务器端与客户端的双向交流，所以它涉及到安全性问题。<BR><BR>使用Java&nbsp;Servlet&nbsp;API&nbsp;进行会话管理<BR><BR>　　javax.servlet.http.HttpSession&nbsp;接口封装了HTTP&nbsp;会话的细节，该会话与一段时间内特定的Web&nbsp;客户对Web&nbsp;服务器的多个请求相关。管理会话数据主要涉及到3个方面：会话交换、会话重定位和会话持久性，只有实现了java.io.Serializable&nbsp;接口的数据对象才能够被交换、重定位和保持。这个接口主要是让对象具有序列化的能力，它可以将对象的状态信息写入任意的输出流中如：文件、网络连接等。<BR><BR>　　编程思路：下面是实现一个简单在商场购物的例子，当用户选购商品(糖果、收音机和练习簿)放入购物袋中，保存选购的商品信息。<BR><BR>　　ShowBuy.java&nbsp;的源代码如下：<BR><BR>import&nbsp;javax.servlet.*;<BR>import&nbsp;javax.servlet.http.*;<BR>import&nbsp;java.io.*;<BR>import&nbsp;java.util.*;<BR><BR>public&nbsp;class&nbsp;ShowBuy&nbsp;extends&nbsp;HttpServlet<BR>{<BR>　public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;req,&nbsp;HttpServletResponse&nbsp;res)<BR>　throws&nbsp;ServletException,&nbsp;java.io.IOException<BR>　{<BR>　　String[]&nbsp;item={"糖果","收音机","练习簿"};&nbsp;<BR>　　//获取会话对象<BR>　　HttpSession&nbsp;session=req.getSession(true);<BR>　　//获取选择的商品数目<BR>　　Integer&nbsp;itemCount=(Interger)&nbsp;session.getValue("itemCount");<BR>　　//如果没放入商品则数目为0<BR>　　if&nbsp;(itemCount==null){<BR>　　　itemCount=new&nbsp;Integer(0);<BR>　　}<BR><BR>　　//&nbsp;Set&nbsp;the&nbsp;content&nbsp;type&nbsp;of&nbsp;the&nbsp;response<BR>　　res.setContentType("text/html;charset=gb2312");<BR>　　PrintWriter&nbsp;out=res.getWriter();<BR><BR>　　//取得POST上来的表单信息<BR>　　String[]&nbsp;itemsSelected;<BR>　　String&nbsp;itemName;<BR>　　itemsSelected=req.getParameterValues("item");&nbsp;<BR>　　//将选中的商品放入会话对象<BR>　　if(itemsSelected&nbsp;!=null){<BR>　　　for(int&nbsp;i=0;i＜itemsSelected.length;i++){<BR>　　　　itemName=itemsSelected;<BR>　　　　itemCount=new&nbsp;Integer(itemCount.intValue()+1);<BR>　　　　session.putValue("Item"&nbsp;+&nbsp;itemCount,itemName);<BR>　　　　//将商品名称定义为ItemX<BR>　　　　session.putValue("itemCount",itemCount);<BR>　　　　//将商品数量放入会话对象&nbsp;<BR>　　　}<BR>　　}<BR><BR>　　//&nbsp;Write&nbsp;the&nbsp;page&nbsp;header<BR>　　out.println("＜html＞");<BR>　　out.println("＜head＞");<BR>　　out.println("＜title＞购物袋的内容＜/title＞");<BR>　　out.println("＜/head＞");<BR>　　out.println("＜body＞");<BR>　　out.println("＜center＞＜h1＞你放在购物袋中的商品是：&nbsp;＜/h1＞＜/center＞");<BR>　　//将购物袋的内容写入页面&nbsp;<BR>　　for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;＜&nbsp;itemCount.intValue();&nbsp;i++)&nbsp;{<BR>　　　String&nbsp;item&nbsp;=(String)&nbsp;session.getValue("Item"+i);<BR>　　　//取出商品名称&nbsp;<BR>　　　out.println(items[Integer.parseInt(item)]);<BR>　　　out.println("＜BR＞");<BR>　　}<BR>　　//&nbsp;Wrap&nbsp;up<BR>　　out.println("＜/body＞");<BR>　　out.println("＜/html＞");<BR>　　out.close();<BR>　}<BR>}&nbsp;<BR><BR>　　客户端的ShowBuy.html&nbsp;的源代码如下：<BR><BR>＜HTML＞<BR>＜HEAD＞<BR>　＜TITLE＞购物袋的实例&nbsp;＜/TITLE＞<BR>＜/HEAD＞<BR>＜BODY＞<BR>　＜CENTER＞＜H1＞百货商场＜/H1＞＜/CENTER＞<BR>　＜HR＞<BR>　＜FORM&nbsp;ACTION='servlet/ShowBuy"&nbsp;METHOD="POST"＞<BR>　　选购商品<BR>　　＜p＞＜INPUT&nbsp;TYPE="Checkbox"&nbsp;NAME="item"&nbsp;VALUE="0"＞<BR>　　　第一种：糖果＜/p＞<BR>　　＜p＞＜INPUT&nbsp;TYPE="Checkbox"&nbsp;NAME="item"&nbsp;VALUE="1"＞<BR>　　　第二种：收音机＜/p＞<BR>　　＜p＞＜INPUT&nbsp;TYPE="Checkbox"&nbsp;NAME="item"&nbsp;VALUE="2"＞<BR>　　　第三种：练习簿＜/p＞<BR>　　＜HR＞<BR>　　＜INPUT&nbsp;TYPE="Submit"&nbsp;NAME="bt_submit"&nbsp;VALUE="加入购物袋"＞<BR>　＜/FORM＞<BR>＜/BODY＞<BR>＜/HTML＞&nbsp;<BR><BR>　　编程技巧说明：<BR><BR>　　在Servlet&nbsp;中进行会话管理时，首先要获得会话对象。HttpServletRequest.getSession()对象返回与请求相关的当前HttpSession&nbsp;对象，并且当该对象不存在时就新创建一个对象；HttpServletRequest.getSession(true)实现相同的功能。如果参数是false，当不存在会话对象时，将返回一个null&nbsp;值。<BR><BR>//获取会话对象<BR>HttpSession&nbsp;session=req.getSession(true);<BR>//获取选择的商品数目<BR>Integer&nbsp;itemCount=(Interger)&nbsp;session.getValue("itemCount");&nbsp;<BR><BR>　　具体操作时，当用户选择商品后，单击“加入购物袋"按钮，Servlet&nbsp;输出用户选择的商品。<BR></TD></TR></TBODY></TABLE></A>]]></description>
</item><item>
<title><![CDATA[使用OSGi，SCA，BPEL和Spring增强可管理性]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32644</link>
<author>lylhelin</author>
<pubDate>2008/3/20 9:34:30</pubDate>
<description><![CDATA[<a>　
    	作者
        <strong>Jean-Jacques Dubray</strong>译者
        <strong>王锐</strong>
        发布于
        2008年3月4日 上午9时48分<br>
   	    
   	自OpenSOA最初发布名为“</a><a href="http://www.osoa.org/download/attachments/250/Power_Combination_SCA_Spring_OSGi.pdf?version=3">优势整合，SCA，OSGi和Spring</a>”的白皮书以来，这三种技术的整合产生了一些有趣的事情。甚至有一个这种基础设施的<a href="http://www.infoq.com/news/2008/02/infiniflow-12">商业实现</a>。<a href="http://www.springsource.com/web/guest/products/springdynamicmodules">Spring动态模块</a>早已合并了Spring和OSGi，同时Spring Bean可以被作为一个<a href="http://www.osoa.org/download/attachments/35/SCA_SpringComponentImplementationSpecification-V100.pdf?version=1">SCA的组件实现</a>使用。最近，Tuscany的Java实现被构建在了Apache的OSGi框架<a href="http://felix.apache.org/site/index.html">Felix</a>之上。
<p class="style1">如果William Vambenepe<a href="http://stage.vambenepe.com/archives/168">愿意承认这种新型基础设施所声称的</a>： </p>
<blockquote>
<ul><li>
    <p class="style1">“灵活性” （感谢OSGi） </p>
    </li><li>
    <p class="style1">“可测试性”（感谢Spring） </p>
    </li><li>
    <p class="style1">“可重用性” （感谢SCA） </p>
    </li></ul>
</blockquote>
<p class="style1">那么他不太同意白皮书作者的观点，表现在：</p>
<blockquote>
<ul><li>
    <p class="style1">“简单性”……除非你是一少部分对所有三种工具都有涉猎的人之一。 </p>
    </li><li>
    <p class="style1">“可管理性”，让我们称之为“可管理潜力”，并保持友好。<br></p>
    </li></ul>
</blockquote>可管理性是SOA的一个重要方面。在一次私人通信中，Brian Cowan，一个位于西雅图的大型保险公司的首席商业架构师指出： <blockquote>SOA似乎正将一些单块（monolithic）应用模型的复杂性推给了管理和运营。这是你得以实现、部署、伸缩或者保护你解决方案的每个独立部分所必须付出的代价。</blockquote>
<p>William在他更早的<a href="http://stage.vambenepe.com/archives/125">一篇文章</a>里对SCA在可管理性上的影响做了评论：<a href="http://stage.vambenepe.com/archives/125"><br></a></p>
<blockquote>
<p>我看到了SCA的另一个优势：它是机器可读的组合应用的逻辑的描述，并位于一个对应用和服务管理有用的粒度层次。<br></p>
<p>与SCA[类似]，BPEL不是针对可管理性而设计的。它更多定位于提高生产力、可移植性以及灵活性。[……] 它还提供了对应用管理非常有用的元数据。无论是从突显应用流程（通过活动），还是从阐明依赖和关联策略（通过伙伴链接）的方面来说。</p>
<p>SCA，OSGi 和 Spring 还有助于填补那个空白。它们提供额外的应用元数据，这些元数据可以被应用管理工具用来给管理任务提供更多的应用上下文。</p>
</blockquote>
<p>在这篇<a href="http://xml.coverpages.org/OSGi-ServicePlatformOverview2004.pdf">对OSGi进行了广泛介绍</a>的白皮书里，作者指出：</p>
<blockquote>
<p>OSGi服务平台是专为那些能够无人值守操作或者在一个平台操作员的控制下操作的设备而设计的。这些就是需要远程管理的设备。</p>
<p>远程管理设备需要一个协议。选择一个适当的协议很困难，因为有太多的选择，包括SNMP、CMISE、CIM、OMA DM或者其它协议。 </p>
<p>OSGi联盟决定不优先选择其中一个协议而否定其它的，因为没有一种协议能够适合各种情况。因此OSGi联盟选择了一个体系结构，其提供了一个能够
被一个经过授权的Bundle使用的管理API。这时，这个经过授权的Bundle就能够扮演一个管理Bundle，在这里Bundle将一个协议映射到
API调用上。</p>
</blockquote>
<p>事实上，西班牙的<a href="http://www.upm.es/">马德里综合技术大学（Universidad Politécnica de Madrid）</a>的<a href="http://www.dit.upm.es/">电讯工程系（Departamento de Ingeniería Telemática）</a>已经为OSGi服务平台开发出了一个叫做<a href="http://jmood.forge.os4os.org/">JMood</a>的基于JMX的管理代理。</p>
<p>结尾，William提出了一些注意事项：</p>
<blockquote>虽然这一切很令人兴奋，不过我们中的一些人还想知道，这样冒着风险将这些规范过于紧密的衔接到一起是不是太早了。我见过太多这种“标准框架”的powerpoint幻灯片，来展示一系列开发中的规范能够如何如何准确地协同工作来满足世界的所有需求。</blockquote>
<p><strong>查看原文：</strong><a id="kvy_" title="http://www.infoq.com/news/2008/02/manageability-oss" href="http://www.infoq.com/news/2008/02/manageability-oss">Enhanced Manageability with OSGi, SCA, BPEL and Spring</a></p><a><br></a>]]></description>
</item><item>
<title><![CDATA[浅谈企业软件设计方法论]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32437</link>
<author>lylhelin</author>
<pubDate>2008/3/13 17:14:40</pubDate>
<description><![CDATA[<a>来源：http://www.jdon.com/article/33237.html<br>　<span class="tpc_content"><br>&nbsp;企业软件设计的方法论是每一个软件设计人员都必须学习、掌握、应用的，在实践中必须有方法论的指导才能取得良好的效果，才能设计出优秀的企业软件。那么，
到底什么是企业软件设计的方法论呢？它有哪些要素呢？我们从哪几个层面来把握它呢？要弄清这些问题，我想还是先了解一下这里面涉及到的几个概念。<br><br>企
业软件是一个信息系统，信息、系统、信息系统的概念我在以前的帖子中也有说过（http:
//www.jdon.com/jivejdon/thread/32743.html），但是说得不够深入，这里再补充一点，到底什么是信息呢？我们之
前说信息是经过加工处理的数据，数据是信息的载体，这只能说是信息的一般意义，并没有道出信息的本质。那么信息的本质是什么呢，信息的本质是关于事物的运
动的状态和规律的表征，是为了消除我们对事物认识的某种不确定性的东西。系统的概念这里也补充一点，系统的基本特征是什么呢？一是整体性，二是综合性，但
还有非常重要的一点，那就是整体最优化，确定最佳目标，寻求最佳设计，在运动中达到一种有序的状态，即在运动中求平衡，求稳定，达到最佳控制。了解了信息
系统，我们再来了解一下设计。什么是设计？我们都知道分析是解决“是什么”的问题，设计是解决“怎么做”的问题，但是，何为设？何为计？我觉得这个设有两
层含义，一是假设，就是要预测未发生的事情，二是设法，就是想办法解决问题。“计”是为什么着想的意思，所以我们的设计有很重要的一层含义就是要为没有发
生的事情着想，预测未来，做事留有扩展和退却的余地，这和做人是一个道理。<br><br>方法论是关于方法的理论，方法的概念我在“用科学的思维方法指导软件的设计开发”中有讲过，但现在看来感觉还是不够全面。这里我引用李志才方法论全书中的关于方法的定义：<b>方法是关于认识世界和改造世界的目的方向，途径，策略手段，工具及其操作程序的选择系统。</b>我
们可以这样来理解，目的方向的选择就是战略问题，途径的选择就是路线问题，策略手段的选择就是政策和策略问题，工具及其操作程序的选择就是战术问题。这是
方法的四大要素，也可以说是四个层次，从上到下层层相扣，缺一不可。从另一个角度来说，方是方向，法是法则，规律，万物皆规律，有法天下和，方法的选择其
实也就是要遵循事物的规律，就是循道，循道是最科学的方法论。<br><br>理解了这些概念后，我们再来寻找企业软件设计方法论，还是从概念出发吧，就从方法的四个要素出发，找到企业软件设计的目的方向，途径，策略手段，工具及其操作程序，这就是企业软件设计的方法论。<br><br>一、	目的方向<br>目
的方向是方法的最高层次问题，是战略问题，直接决定了方法的正确与否，目的方向错了，就算你后面的路线、策略手段得当，最终做出来的软件还是低质量的。也
许你会觉得目的方向的选择很简单，做软件嘛，不就是要能满足客户的需求吗？这句话本身并没有错，关键是对需求的理解，普通的理解客户的需求是指业务功能需
求，但是，时代在变，需求的定义也在变，软件的灵活扩展性，可维护性也越来越突出为客户的需求了，而功能需求虽然也重要，但从我们的软件实现上来说要比灵
活扩展性和可维护性容易实现得多，作为软件设计人员，怎么保证软件的灵活扩展性和可维护性才是真正的难点。所以，目前来说，正确的目的方向应该是软件的高
灵活扩展性，高可维护性，也就是软件的质，这才是软件的生命力所在。<br>二、	途径<br>途径问题也就是路线问题，对企业软件来说，现在有两条典型
的路线，一是走面向数据库的路线，另一条是走面向对象的路线。这是两条决然不同的路线，说得严重点是水火不融，但我感到疑惑的是为什么还是有很多人分不清
楚这两条路。目前大部分公司和个人都是走的面向数据库路线，面向对象的道路上真可以说是“路上行人欲断魂”！但是，新生事物总是要战胜旧事物的，我相信面
向对象的路上会有越来越多的同路人。<br>三、	策略手段<br>选定了途径后我们就该选择合适的策略手段了，可以说架构分层，框架的运用，领域建模，
设计模式都是我们所采用的策略手段了。从狭义上说这也是我们通常所说的方法了，在这一层面上，是软件设计人员最具有发挥和创造空间的。这几个策略手段具体
的讨论在论坛里面已经有很多这样的帖子了，我在这里就不多说了。<br>四、	工具及其操作程序<br>工具及其操作程序的选择是在上一环节的基础上进行的，包括编程语言及编程工具的选择，其他的还有建模工具、具体框架的选择。选定了工具后要熟悉这些工具的操作程序，运用工具时要遵循一定的操作程序，这样才能真正发挥工具的作用。<br><br>从
以上的分析我们可以看出，正确地选择企业软件设计方法需要很多方面的知识，我们首先需要构造我们的知识体系，这个我在“关于构建自己的知识体系架构”中也
提到过，但是我们还要知道的是有了这些知识还并不等于你就有科学的方法了，方法系统是知识系统的升华，是理论与实践的桥梁。而且我们还必须知道，方法要素
的选择在很多时候也是一个子方法系统，同样包含方法的四大要素。<br><br>本文是我的一点愚见，只是概略地叙述了一下方法论的要素，可能大家会觉得很虚，还望不要猛拍砖，呵呵。希望能与大家共同讨论更具体的方法论。本文定有不足之处，恳请各位网友批评指正！</span></a>]]></description>
</item><item>
<title><![CDATA[Tomcat升级到5.5,数据源无法使用的问题整理]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32433</link>
<author>lylhelin</author>
<pubDate>2008/3/13 16:04:34</pubDate>
<description><![CDATA[近日已经有多人询问此问题，这里简单的说明一下，希望遇到此问题的朋友有帮助 <br>
5.0中的配置如下 <br>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Resource </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="jdbc/student"</span><span style="color: rgb(255, 0, 0);"> auth</span><span style="color: rgb(0, 0, 255);">="Container"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="javax.sql.DataSource"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ResourceParams </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="jdbc/student"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">factory</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">org.apache.commons.dbcp.BasicDataSourceFactory</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">username</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">root</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">password</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">sa</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">driverClassName</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">com.mysql.jdbc.Driver</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">url</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">jdbc:mysql:// localhost:3306/student?useUnicode=true</span><span style="color: rgb(255, 0, 0);">&amp;amp;</span><span style="color: rgb(0, 0, 0);">characterEncoding=UTF-8</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">maxActive</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">maxIdle</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">maxWait</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">10000</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">parameter</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ResourceParams</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
</div>
 在5.5下面，报的异常如下 <br>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 0);">org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'</span></div>
</div>
<p>解决方法：<br>
其实在5.5的文档里面，已经给出了配置的标准写法。将数据源修改为如下格式即可</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Resource </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="jdbc/TestDB"</span><span style="color: rgb(255, 0, 0);"> auth</span><span style="color: rgb(0, 0, 255);">="Container"</span><span style="color: rgb(255, 0, 0);"> type</span><span style="color: rgb(0, 0, 255);">="javax.sql.DataSource"</span><span style="color: rgb(255, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp; maxActive</span><span style="color: rgb(0, 0, 255);">="100"</span><span style="color: rgb(255, 0, 0);"> maxIdle</span><span style="color: rgb(0, 0, 255);">="30"</span><span style="color: rgb(255, 0, 0);"> maxWait</span><span style="color: rgb(0, 0, 255);">="10000"</span><span style="color: rgb(255, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp; username</span><span style="color: rgb(0, 0, 255);">="javauser"</span><span style="color: rgb(255, 0, 0);"> password</span><span style="color: rgb(0, 0, 255);">="javadude"</span><span style="color: rgb(255, 0, 0);"> driverClassName</span><span style="color: rgb(0, 0, 255);">="com.mysql.jdbc.Driver"</span><span style="color: rgb(255, 0, 0);"><br>
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top">&nbsp;&nbsp; url</span><span style="color: rgb(0, 0, 255);">="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"</span><span style="color: rgb(0, 0, 255);">/&gt;</span></div>
</div>
本文来自：<a href="http://www.ailiss.cn/">www.ailiss.cn</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]></description>
</item><item>
<title><![CDATA[2008年商业软件六大趋势]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32315</link>
<author>lylhelin</author>
<pubDate>2008/3/10 13:10:18</pubDate>
<description><![CDATA[<div class="dots">作者: 博文, 　出处:计算机世界,　责任编辑: 王尔玉,　<div class="posted">2008-02-27 08:39</div></div>
    <h5>　　Gartner、IDC、Forrester等公司的分析师们认为，企业级软件在2008年将会有不小的变化，这些变化包括软件供应商之间的联盟、软件的定价策略以及软件本身的创新等。 </h5>
<div class="guanggao"><span id="contentAdv">
<script>
document.write('<SCRIPT LANGUAGE="JavaScript" src='+jsurl+'><\/SCRIPT>');
</script><script language="JavaScript" src="http://www.ctocio.com.cn/ttfiles/ccimages/cio_pip.js"></script>
</span></div>要准确预测未来并不是一件容易的事情，但是，每年的岁末年初，人们还是情不自禁地对新的一年进行一番预测。新年伊始，受美国的
《CIO》杂志邀请，Forrester、Gartner等咨询机构的一些分析师对企业级应用软件市场进行了预测，总结出了6个发展趋势。分析师们一致认
为：
企业目前普遍使用的应用软件市场，如ERP、CRM、供应链管理系统等，在2008年将会有不小的变化，这些变化包括软件供应商之间的联盟、软件的定价策
略以及软件本身的创新。 <p>　　这种变化的很大一部分原因在于，人们对2008年经济形势的不乐观估计将会影响企业的IT预算和CIO可以支配的资金。由于很多人对今年的
经济形势并不看好，因此，CIO们普遍面临更大的压力，新的一年里他们需要以更小的投入获得更大的回报。而对CIO而言，企业的核心应用软件和软件平台自
然是落实这种回报的重点。</p>
<p>　　“全球化、快速变化的市场、员工的变动以及新规定的出台使得企业对软件的灵活性和可用性要求越来越高，” Forrester公司业务流程和应用软件研究经理Sharyn Leaver说，“结果，从事流程和应用软件开发的公司就不得不提供更加灵活、好用的软件。”</p>
<p>　　不仅如此，Gatner研究副总裁Jeff
Woods补充说，来自业务方面的压力也越来越大，业务人员希望企业的应用软件能够给企业带来实实在在的回报。同时，通过采用各种最新的技术(如SOA)
可以为企业提供更加可靠的计算环境，这使得CIO的决策对企业的未来发展越来越重要。</p>
<p>　　对于企业CIO来说，2008年以下6个趋势值得关注，这些趋势将对CIO的未来决策产生重要影响。</p>
<p><strong>　　趋势1:</strong></p>
<p><strong>　　软件公司继续兼并</strong></p>
<p>　　过去的一年可以说是软件企业的并购重组之年，IBM并购了Cognos，Oracle买下了Hyperion、SAP吃下了Business
Objects，惠普买下了Opsware，微软买下了多个软件企业。SAP、Oracle、IBM、微软等软件巨头们之所以投入了数十亿美元来购买那些
稍小一些的竞争对手，只因为这些企业开发出了它们非常急需的某些软件或者某些功能。</p>
<p>　　那么，CIO们应该如何看2008年的软件市场呢?技术咨询公司451集团(451
Group)去年年底进行的一项调查显示，软件界的人士普遍预计2008年还会有更多的并购事件发生。那些最近一年内并购了其他公司的决策者有85%以上
的人认为，今年的并购次数将保持甚至超过去年。调查还显示，有一半以上大型软件企业在并购方面的预算将增加。451集团进行的这项研究访问了那些在过去的
5年内进行过并购的公司中的开发和战略决策人士，这些公司5年内总计投入了1500亿美元并购了500多家企业。其中只有不到10%的人认为今年购并次数
将减少。</p>
<p>　　杜克(Duke)大学和《CFO》杂志进行的一项调查也显示，40%的美国公司计划在2008年购买一些其他公司的资产，其中，1/3的公司计划购买一家或者几家公司，22%的公司计划从其他公司中购买一部分但不是整个公司。</p>
<p>　　Forrester的Leaver说，她预测2008年将会有更多的并购事件发生，并购的对象将主要是那些行业特征非常明显的、专注在特定领域
的软件公司。她说:“我想这些并购的影响不会再像2007年那么大，因为去年被并购的都是一些较大的公司，而现在这样的公司市场上剩下的已不多了。”</p>
<p><strong>　　趋势2:</strong></p>
<p><strong>　　软件生态链将重组</strong></p>
<p>　　作为一系列兼并事件之后的必然结果，市场上中等规模和大型的软件公司越来越少(当然，这是相对而言)，可供CIO们选择的合作对象也越来越少。
而对那些软件巨头们来说，它们的创新和未来成功将越来越依赖于它们与其他小软件公司、合作伙伴和开发者社区的关系。因为，尽管表面上看CIO可以购买
SAP或者Oracle的套装软件，而实际上，CIO会花很多时间来考虑SAP或者Oracle各自的生态链上都有哪些公司、它们都提供哪些产品以及这些
产品是否与企业技术战略一致?</p>
<p>　　“ERP系统本质上只是一个软件平台，生态链上的其他公司围绕这个平台提供产品和服务，”Gartner的Wood说，“这是今天的CIO必须认识到的一点，未来这一点还会越来越明显。”</p>
<p>　　Forrester的Leaver强调说，以往CIO在应用软件的购买上只是被动地受几个软件巨头的推动，而今天，CIO必须认真考虑哪个供应
商的生态链能更适合自己公司的长期战略。这一点非常关键，因为如果软件供应商的生态链中已有某个行业应用软件(如零售行业)能满足你的长期需要，你在部署
这样的软件时无疑将容易得多，也更容易将此类杀手级的应用集成到你的ERP系统中。</p>
<p>　　Wood说，软件巨头们都有各自不同的产品开发计划和发展战略，比如，Oracle倾向于购买或者自己开发行业软件(如零售行业和通信行业的软件)，而SAP更愿意开放自己的平台给合作伙伴，让它们来开发这些杀手级的应用。</p>
<p>　　“CIO们一定不能忽视围绕软件巨头形成的生态链。请记住，没有杀手级应用，光有一个软件平台肯定无法长久存在。” Wood说。</p><p><strong>　　趋势3:</strong></p>
<p><strong>　　激烈竞争仍将延续</strong></p>
<p>　　尽管企业级应用软件市场的竞争从来都是非常激烈的，但是2008年CIO们将看到软件供应商们在这个市场进行更为激烈的争夺。</p>
<p>　　“目前，我们还看不出这个领域的竞争有丝毫减缓的迹象，”Wood说，“这对CIO们来说应该算一个好消息。”</p>
<p>　　虽然软件供应商通过自己开发或者并购，积累了越来越丰富的行业经验和提供更多的技术平台，从而提高了自己的盈利能力，但是在这些领域仍然有不少
竞争对手，因为这一行业仍然有比较丰厚的利润。因此，对于CIO来说，不要害怕用一家软件商来牵制另一家，以帮助自己在合同的谈判中争取到更有利的价格。</p>
<p>　　“供应商们现在也越来越聪明，它们知道什么时候该竞争、什么时候该合作、哪些值得竞争、哪些不值得竞争。”Woods说，如果你认为价格值得认真协商，那今年就应该能够尽力得到一个满意的价格。</p>
<p>　　另外，Forrester首席分析师Ray
Wang补充说，由于这些公司间的并购刚刚宣布或者宣布不久，因此现在是一个非常好的时机，可以和这些公司订立一个长期的价格非常优惠的软件维护合同，或
者以一个非常优惠的折扣购买新的软件模块。“根据过去的经验，在公司宣布正式被收购后，其销售人员通常会在公司的最后这一点时间内为客户提供一些非常优惠
的合同。”趋势4: </p>
<p><strong>　　小公司更注重创新</strong></p>
<p>　　软件巨头们并不是因创新而知名的，而更小些的软件企业必须靠创新赢得在这个市场上的生存机会。</p>
<p>　　Leaver 说: “与软件巨头们相比，小公司更有可能更快速地提供企业需要的应用。”</p>
<p>　　未来，这些小公司将更加努力地开发具有更好的适应能力、能即插即用的应用软件，而那些软件巨头很难做到这一点。Leaver解释说，例如，大多
数的中小软件公司开发的应用都运行在IBM的Websphere、SAP的Netweaver和Oracle的中间件产品之上，从而使得用户的IT人员可
以非常容易而且快速地配置和修改它们。正是由于存在大批这样的应用软件，CIO才不用过多地关心软件架构，而把注意力放在这些软件是否好用本身。</p>
<p>　　另外，IDC的企业应用研究主任Albert Pang补充说，这些创新将导致越来越多的Web 2.0 应用和其他企业用户非常喜欢的应用出现。“不久，企业用户就能用上软件公司提供的各种工具让他们轻松地完成企业级的Mashup应用。”</p>
<p>　　例如，Pang解释说，企业级Mashup能很容易地创建新的财务系统，这些财务系统允许用户把外部的一些变量(如天气预报和环境影响研究结果)集成到他们的财务规划、预测和报表生成流程以及投资回报的风险评估中。</p>
<p>　　Pang认为，对于CIO来说最为重要的一点是，必须寻求短期与中长期发展之间的平衡，避免受到来自软件供应商的影响而盲目购买。“如果真的需要购买什么产品或者服务，CIO应该学会比较多个软件开发商为自己赢得一个较好的价格。”</p><p><strong>　　趋势5:</strong></p>
<p><strong>　　软件付费策略面临挑战</strong></p>
<p>　　长期以来，CIO们似乎从来没有停止过抱怨企业级软件高昂的维护和服务费。据统计，这笔费用往往占到企业IT投入的22%以上，成为很多企业IT部门的一个沉重负担。</p>
<p>　　Woods说: “在软件供应商们一再强调它们的维护能给用户带来诸多好处，比如软件功能有很大改善的时候，CIO们却常常问自己，这笔维护费给我带来了什么回报?”</p>
<p>　　过去的一年多时间里，有些CIO或者尝试或者已经开始转向第三方(如被SAP收购的TomorrowNow)来维护自己的EPR和CRM系统。不过，Oracle指控TomorrowNow以及SAP在处理这件事上的犹豫给这种由第三方维护的模式带来了一片阴云。</p>
<p>　　即便如此，第三方维护的方式也已经激起了很多IT经理们的兴趣，2008年尝试这种模式的CIO会越来越多。“TomorrowNow的存在使得人们开始思考软件维护的成本，”Woods说，“几乎每一个CIO都在问，我能换一种软件维护的方式吗?”</p>
<p>　　对CIO而言一个不大好的情况是，一些供应商的软件设计得不够好，用户无法采用新一代的企业软件工具自己进行维护和升级。因此，CIO要做出最后的决定并不容易。</p>
<p>　　事实上，由于备受用户指责的软件维护费用收入占到很多软件公司收入的90%以上，因此，不少软件公司根本不愿意触及这个问题，更不提考虑进行一
些实质上的改变了。但是，Leaver认为，这种情形在2008年将会有所改观。如果软件公司希望继续让它们的客户满意，软件公司就必须重新考虑它们的价
格策略和软件维护费的定价问题。</p>
<p><strong>　　趋势6:</strong></p>
<p><strong>　　供应链更无线化、更危险</strong></p>
<p>　　无线技术将继续影响供应链的未来发展。对供应链的未来影响最大的无线技术首选RFID，它也吸引了众多人的注意。尽管这种技术仍然处于不断完善之中，但是，分析师们认为，在2008年，它的应用将继续扩展和普及。</p>
<p>　　值得注意的是，恰恰是供应链上采用的其他一些先进技术使得供应链的效率有了很大提高，比如，无线数据传输技术和配送中心日常运营中使用的无线技
术等。但是，分析师们指出，供应链摆脱了线缆羁绊的同时也增加了风险。零售系统研究公司(Retail Systems
Research)最近的一份研究表明，在供应链系统因采用新设备而引发的重大安全漏洞中，源于无线技术的比例有明显增加。</p>
<p>　　零售系统研究公司分析师Steve
Rowen认为，无线系统的攻击者已经不是那些无聊的黑客，他们懂技术、有目的，在他们看来，那些不认真对数据传输进行保护的公司就是在为他们提供一个挣
钱的机会。Rowen说，“最近几年，因为窃取客户的数据可以为犯罪分子换得比较高的回报，针对无线系统的有组织犯罪正在成为‘大生意’。”</p>
<p>　　在2008年，Rowen提出的第一个建议就是引起公司高层的注意。“最成功的安全保护办法就是尽快让CXO们重视这一隐患，”他说，“尽管不
同的零售商其具体的安全措施不尽相同，但有一点是共同的，就是这些具体的办法都受限于公司董事会和管理层目前对安全问题的重视程度。”</p>]]></description>
</item><item>
<title><![CDATA[关于WebService]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32260</link>
<author>lylhelin</author>
<pubDate>2008/3/7 17:38:52</pubDate>
<description><![CDATA[<p class="MsoNormal"><span style="font-family: 宋体;">问题：</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">1、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span></span></span><!--[endif]--><span class="GramE"><span style="font-family: 宋体; color: rgb(0, 51, 102);">甚么是</span></span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WebService</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">？</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WebService</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">基于</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">SOAP</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">协议，而</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">SOAP</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">主要基于</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">Http</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">协议，因为</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">Http</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">应用最为广泛，几乎不受限制。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">SOAP</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">的作用是：</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 39pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: Wingdings; color: rgb(0, 51, 102);" lang="EN-US"><span style="">&#216;<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN-US">Access data and process services over the web<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 39pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: Wingdings; color: rgb(0, 51, 102);" lang="EN-US"><span style="">&#216;<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN-US">Transfer data objects between clients and
services over the web<o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p>&nbsp;</o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">2、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span></span></span><!--[endif]--><span style="font-family: 宋体; color: rgb(0, 51, 102);">如何生成</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WebService</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">？</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: rgb(0, 51, 102);">通过一些工具对</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">Java</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">类生成</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WSDL</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">文件。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 46.5pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">（1）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体; color: rgb(0, 51, 102);">编写</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">Java</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">类</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 46.5pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">（2）<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><!--[endif]--><span style="font-family: 宋体; color: rgb(0, 51, 102);">生成</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WSDL</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">文件。如通过</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">Axis</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">生成，</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">Axis</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">依赖</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">web</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">服务器。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">3、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span></span></span><!--[endif]--><span style="font-family: 宋体; color: rgb(0, 51, 102);">如何使用</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WebService</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">？</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-size: 11pt; font-family: 宋体; color: black;">在用户能够调用</span><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务之前，必须确定这个服务内包含哪些商务方法，找到被调用的接口定义，还要在服务端来编制软件。所以，我们需要一种方法来发布我们的</span><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务，即</span><span style="font-size: 11pt; color: black;" lang="EN-US">UDDI</span><span style="font-size: 11pt; font-family: 宋体; color: black;">。</span><span style="font-size: 11pt; color: black;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-size: 11pt; font-family: 宋体; color: black;">对于商业用户来说，要找到一个自己需要使用的服务，他必须知道如何来调用，即使用</span><span style="font-size: 11pt; color: black;" lang="EN-US">WSDL</span><span style="font-size: 11pt; font-family: 宋体; color: black;">。</span><span style="font-size: 11pt; color: black;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-size: 11pt; font-family: 宋体; color: black;">当商业用户通过</span><span style="font-size: 11pt; color: black;" lang="EN-US">UDDI</span><span style="font-size: 11pt; font-family: 宋体; color: black;">找到你的</span><span style="font-size: 11pt; color: black;" lang="EN-US">WSDL</span><span style="font-size: 11pt; font-family: 宋体; color: black;">描述文档后，他通过可以</span><b><span style="font-size: 11pt; color: black;" lang="EN-US">Simple Object Access Protocol
(SOAP) </span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">调用你建立的</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">服务中的一个或多个操作。</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US"><o:p></o:p></span></b></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-size: 11pt; font-family: 宋体; color: black;">为了支持</span><span style="font-size: 11pt; color: black;" lang="EN-US">UDDI</span><span style="font-size: 11pt; font-family: 宋体; color: black;">在</span><span style="font-size: 11pt; color: black;" lang="EN-US">Java</span><span style="font-size: 11pt; font-family: 宋体; color: black;">平台上的功能，</span><span style="font-size: 11pt; color: black;" lang="EN-US">Java APIs for XML Registries
(JAXR)</span><span style="font-size: 11pt; font-family: 宋体; color: black;">允许开发者来访问注册中心。<b>值得注意的是，</b></span><b><span style="font-size: 11pt; color: black;" lang="EN-US">JAXR</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">并不是建立</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">服务必需的，你可以利用其他常用的</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">XML APIs</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">来直接集成这些协议。</span></b><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">4、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span></span></span><!--[endif]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WebService</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">的应用场景和领域有哪些？</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><span style="">5、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
</span></span></span><!--[endif]--><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">WebService</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">的优缺点有那些？</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span style="font-family: 宋体; color: rgb(0, 51, 102);">优点：平台独立，易于使用，是</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">SOA</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">的基础。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p>&nbsp;</o:p></span></p>

<p class="MsoNormal"><span style="font-family: 宋体; color: rgb(0, 51, 102);">相关技术：</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">1、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span></span><!--[endif]--><span style="font-size: 11pt; color: black;" lang="EN-US">UDDI (Universal Description,
Discovery, and Integration)<o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体; color: black;">是一个主要针对</span><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务供应商和使用者的新项目。</span><span style="font-size: 11pt; color: black;" lang="EN-US">UDDI </span><span style="font-size: 11pt; font-family: 宋体; color: black;">项目中的成员可以通过</span><b><span style="font-size: 11pt; color: black;" lang="EN-US">UDDI Business Registry (UBR)</span></b><span style="font-size: 11pt; color: black;" lang="EN-US"> </span><span style="font-size: 11pt; font-family: 宋体; color: black;">来操作</span><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务的调用，</span><span style="font-size: 11pt; color: black;" lang="EN-US">UBR</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是一个全球性的服务。</span><span style="font-size: 11pt; color: black;"> <b><span lang="EN-US">Web</span></b></span><b><span style="font-size: 11pt; font-family: 宋体; color: black;">服务供应商</span></b><span style="font-size: 11pt; font-family: 宋体; color: black;">可以在</span><span style="font-size: 11pt; color: black;" lang="EN-US">UBR</span><span style="font-size: 11pt; font-family: 宋体; color: black;">中描述并且注册他们的服务。</span><span style="font-size: 11pt; color: black;"> </span><b><span style="font-size: 11pt; font-family: 宋体; color: black;">用户</span></b><span style="font-size: 11pt; font-family: 宋体; color: black;">可以在</span><span style="font-size: 11pt; color: black;" lang="EN-US">UBR</span><span style="font-size: 11pt; font-family: 宋体; color: black;">中查找并定位那些他们需要的服务。</span><span style="font-size: 11pt; color: black;" lang="EN-US"> UDDI</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是一种根据描述文档来引导系统查找相应服务的机制。</span><span style="font-size: 11pt; color: black;" lang="EN-US"> UDDI</span><span style="font-size: 11pt; font-family: 宋体; color: black;">包含标准的</span><span style="font-size: 11pt; color: black;" lang="EN-US">“</span><span style="font-size: 11pt; font-family: 宋体; color: black;">白皮书</span><span style="font-size: 11pt; color: black;" lang="EN-US">”</span><span style="font-size: 11pt; font-family: 宋体; color: black;">类型的商业查询方式，</span><span style="font-size: 11pt; color: black;" lang="EN-US"> “</span><span style="font-size: 11pt; font-family: 宋体; color: black;">黄皮书</span><span style="font-size: 11pt; color: black;" lang="EN-US">”</span><span style="font-size: 11pt; font-family: 宋体; color: black;">类型的局部查找，以及</span><span style="font-size: 11pt; color: black;" lang="EN-US"> “</span><span style="font-size: 11pt; font-family: 宋体; color: black;">绿皮书</span><span style="font-size: 11pt; color: black;" lang="EN-US">”</span><span style="font-size: 11pt; font-family: 宋体; color: black;">类型的服务类型查找。</span><span style="font-size: 11pt; color: black;"> <b><span lang="EN-US">UDDI</span></b></span><b><span style="font-size: 11pt; font-family: 宋体; color: black;">利用</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">消息机制（标准的</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">XML/HTTP</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">）来发布，编辑，浏览以及查找注册信息</span></b><span style="font-size: 11pt; font-family: 宋体; color: black;">。它采用</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">格式来封装各种不同类型的数据，并且发送到注册中心或者由注册中心来返回需要的数据。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">2、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span></span><!--[endif]--><b><span style="font-size: 11pt; color: black;" lang="EN-US">WSDL (Web Services Description
Language) </span></b><span style="font-size: 11pt; font-family: 宋体; color: black;">规范</span><span style="font-size: 11pt; color: black;" lang="EN-US"><o:p></o:p></span></p>

<p class="MsoNormal"><b><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><span style="font-size: 11pt; font-family: 宋体; color: black;">是一个描述接口，语义以及</span><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务为了响应请求需要经常处理的工作的</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">文档。这将使简单地服务方便，快速地被描述和记录。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><b><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">3、</span></span></b><!--[endif]--><b><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP<o:p></o:p></span></b></p>

<p class="MsoNormal"><b><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">是</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">文档形式的调用商业方法的规范，它可以支持不同的底层接口，<span class="GramE">象</span></span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">HTTP(S)</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">或者</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">SMTP</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">。</span></b><span style="font-size: 11pt; color: black;"> </span><span style="font-size: 11pt; font-family: 宋体; color: black;">之所以使用</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是因为它的独立于编程语言，良好的可扩展性以及强大的工业支持。之所以使用</span><span style="font-size: 11pt; color: black;" lang="EN-US">HTTP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是因为几乎所有的网络系统都可以用这种协议来通信，由于它是一种简单协议，所以可以与任何系统结合，还有一个原因就是它可以利用</span><span style="font-size: 11pt; color: black;" lang="EN-US">80</span><span style="font-size: 11pt; font-family: 宋体; color: black;">端口来穿越过防火墙。</span><span style="font-size: 11pt; color: black;" lang="EN-US"> SOAP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">的强大是因为它简单。</span><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是一种轻量级的，非常容易理解的技术，并且很容易实现。它有工业支持，可以从各主要的电子商务平台供应商那里获得。从技术角度来看，</span><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">详细指明了如何响应不同的请求以及如何对参数编码。一个</span><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">封装了可选的头信息和正文，并且通常使用</span><span style="font-size: 11pt; color: black;" lang="EN-US">HTTP POST</span><span style="font-size: 11pt; font-family: 宋体; color: black;">方法来传送到一个</span><span style="font-size: 11pt; color: black;" lang="EN-US">HTTP </span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务器，当然其他方法也是可以的，例如</span><span style="font-size: 11pt; color: black;" lang="EN-US">SMTP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">。</span><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">同时支持消息传送和远程过程调用。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">4、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span></span><!--[endif]--><span style="font-size: 11pt; color: black;" lang="EN-US">JAXR<o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">是一个方便的</span><span lang="EN-US">API</span><span style="font-family: 宋体;">，它提供了</span><span lang="EN-US">Java API</span><span style="font-family: 宋体;">来发布，查找以及编辑那些注册信息。它的重点在于基于</span><span lang="EN-US">XML</span><span style="font-family: 宋体;">的</span><span lang="EN-US">B2B</span><span style="font-family: 宋体;">应用，复杂的地址本查找以及对</span><span lang="EN-US">XML</span><span style="font-family: 宋体;">消息订阅的支持等</span><span lang="EN-US">Web</span><span style="font-family: 宋体;">服务。</span> <b><span style="font-family: 宋体;">它也可以用来访问其他类型的注册中心，<span class="GramE">象</span></span><span lang="EN-US">ebXML</span></b><b><span style="font-family: 宋体;">注册中心</span></b><span style="font-family: 宋体;">。这些对</span><span lang="EN-US">Web</span><span style="font-family: 宋体;">服务的注册信息进行的操作，可以使用当前的一些</span><span lang="EN-US">Web</span><span style="font-family: 宋体;">服务工具来完成（例如第三方的</span><span lang="EN-US">SOAP</span><span style="font-family: 宋体;">和</span><span lang="EN-US">ebXML</span><span style="font-family: 宋体;">消息工具）。另外，当</span><span lang="EN-US">JAXP</span><span style="font-family: 宋体;">提供了一致并具有针对性的</span><span lang="EN-US">API</span><span style="font-family: 宋体;">来完成这些操作，这将使开发变得更加容易。</span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="" lang="EN-US"><span style="">5、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span></span><!--[endif]--><span style="" lang="EN-US">JAX/RPC<o:p></o:p></span></p>

<p class="MsoNormal"><span style="" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">为了使开发人员专注于建立<span class="GramE">象</span></span><span style="" lang="EN-US">SOAP</span><span style="font-family: 宋体;">那样的基于</span><span style="" lang="EN-US">XML</span><span style="font-family: 宋体;">的请求，</span><span style="" lang="EN-US">JCP</span><span style="font-family: 宋体;">正在开发基于</span><span style="" lang="EN-US">RPC (JAX/RPC) </span><span style="font-family: 宋体;">的</span><span style="" lang="EN-US">Java API</span><span style="font-family: 宋体;">。</span><span style="" lang="EN-US">JAX/RPC</span><span style="font-family: 宋体;">是用来发送和接收方法调用请求的，它基于</span><span style="" lang="EN-US">XML</span><span style="font-family: 宋体;">协议，<span class="GramE">象</span></span><span style="" lang="EN-US">SOAP</span><span style="font-family: 宋体;">，或者其他的<span class="GramE">象</span></span><span style="" lang="EN-US">XMLP
(XML Protocol</span><span style="font-family: 宋体;">，要了解更多可以参考</span><span style="" lang="EN-US"><a href="http://www.w3.org/2000/xp/">http://www.w3.org/2000/xp/</a>)</span><span style="font-family: 宋体;">。</span><span style="" lang="EN-US">JAX/RPC</span><span style="font-family: 宋体;">使你不用再关注这些协议的规范，使应用的开发更快速。不久，开发人员就不用直接以</span><span style="" lang="EN-US">XML</span><span style="font-family: 宋体;">表示方法调用了。目前有很多第三方实现了</span><span style="" lang="EN-US">SOAP</span><span style="font-family: 宋体;">，开发人员可以在不同的层次上调用</span><span style="" lang="EN-US">SOAP</span><span style="font-family: 宋体;">，并选择使用哪一种。将来，</span><span style="" lang="EN-US">JAX/RPC</span><span style="font-family: 宋体;">会取代这些</span><span style="" lang="EN-US">APIs</span><span style="font-family: 宋体;">并提供一个统一的接口来构造以及处理</span><span style="" lang="EN-US">SOAP RPC</span><span style="font-family: 宋体;">请求。在接收一个从商业伙伴那里过来的</span><span style="" lang="EN-US">SOAP</span><span style="font-family: 宋体;">请求的时候，一个</span><span style="" lang="EN-US">Java servlet</span><span style="font-family: 宋体;">用</span><span style="" lang="EN-US">JAX/RPC</span><span style="font-family: 宋体;">来接收这个基于</span><span style="" lang="EN-US">XML</span><span style="font-family: 宋体;">的请求。一旦接收到请求后，</span><span style="" lang="EN-US">servlet</span><span style="font-family: 宋体;">会调用商务方法，并且把结果回复给商业伙伴。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN">6</span><span style="font-family: 宋体; color: rgb(0, 51, 102);">、</span><span style="color: black;" lang="EN-US">JAXM</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 11pt; font-family: 宋体; color: black;">当从商业合作伙伴那里接收一个</span><span style="font-size: 11pt; color: black;" lang="EN-US">Web</span><span style="font-size: 11pt; font-family: 宋体; color: black;">服务的请求时，我们需要</span><span style="font-size: 11pt; color: black;" lang="EN-US">Java API</span><span style="font-size: 11pt; font-family: 宋体; color: black;">实现一个</span><span style="font-size: 11pt; color: black;" lang="EN-US">Servlet</span><span style="font-size: 11pt; font-family: 宋体; color: black;">来处理</span><span style="font-size: 11pt; color: black;" lang="EN-US">ebXML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">消息，就<span class="GramE">象</span>我们用</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAX/RPC</span><span style="font-size: 11pt; font-family: 宋体; color: black;">来处理</span><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">请求一样。</span><span style="font-size: 11pt; color: black;"> <b><span lang="EN-US">Java API for XML
Messaging (JAXM) </span></b></span><b><span style="font-size: 11pt; font-family: 宋体; color: black;">是集成</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">消息标准（<span class="GramE">象</span></span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">ebXML</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">消息或者</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">SOAP</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">消息）的规范。</span></b><span style="font-size: 11pt; color: black;"> </span><span style="font-size: 11pt; font-family: 宋体; color: black;">这个</span><span style="font-size: 11pt; color: black;" lang="EN-US">API</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是用来推动</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">消息处理的，它检测那些预定单的消息格式以及约束。它控制了所有的消息封装机制，用一种直观的方式分割了消息中的信息，<span class="GramE">象</span>路由信息，发货单。这样，开发人员只要关注消息的有效负载，而不用去担心那些消息的重复处理。目前的开发人员用</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAXP</span><span style="font-size: 11pt; font-family: 宋体; color: black;">来实现</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAXM</span><span style="font-size: 11pt; font-family: 宋体; color: black;">将要提供的功能，</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAXM</span><span style="font-size: 11pt; font-family: 宋体; color: black;">将会提供一套非常具有针对性的</span><span style="font-size: 11pt; color: black;" lang="EN-US">API</span><span style="font-size: 11pt; font-family: 宋体; color: black;">来处理基于</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">的消息传送。这将大大简化开发人员的代码，并使它们具有统一的接口。</span><span style="font-size: 11pt; color: black;" lang="EN-US"> JAXM</span><span style="font-size: 11pt; font-family: 宋体; color: black;">和</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAX/RPC</span><span style="font-size: 11pt; font-family: 宋体; color: black;">的差别在于处理消息导向的中间件以及远程过程调用的不同。</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAXM</span><span style="font-size: 11pt; font-family: 宋体; color: black;">注重于消息导向，而</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAX/RPC</span><span style="font-size: 11pt; font-family: 宋体; color: black;">是用来完成远程过程调用的。</span><span style="font-family: Arial; color: rgb(0, 51, 102);" lang="EN"><o:p></o:p></span></p>

<p class="MsoNormal"><span lang="EN-US">7</span><span style="font-family: 宋体;">、</span><span style="color: black;" lang="EN-US">JAXB</span></p>

<p class="MsoNormal"><b><span style="font-size: 11pt; color: black;" lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>XML</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">绑定技术可以把</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">文档和</span></b><b><span style="font-size: 11pt; color: black;" lang="EN-US">Java</span></b><b><span style="font-size: 11pt; font-family: 宋体; color: black;">对象进行自由转换。</span></b><span style="font-size: 11pt; color: black;"> </span><span style="font-size: 11pt; font-family: 宋体; color: black;">用</span><span style="font-size: 11pt; color: black;" lang="EN-US">JAXB</span><span style="font-size: 11pt; font-family: 宋体; color: black;">，你可以在后台的</span><span style="font-size: 11pt; color: black;" lang="EN-US">EJB</span><span style="font-size: 11pt; font-family: 宋体; color: black;">层，把</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">文档转换成</span><span style="font-size: 11pt; color: black;" lang="EN-US">Java</span><span style="font-size: 11pt; font-family: 宋体; color: black;">对象。同样你也可以把从</span><span style="font-size: 11pt; color: black;" lang="EN-US">EJB</span><span style="font-size: 11pt; font-family: 宋体; color: black;">中取出的</span><span style="font-size: 11pt; color: black;" lang="EN-US">Java</span><span style="font-size: 11pt; font-family: 宋体; color: black;">对象转换成</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">文档返回给用户。</span><span style="font-size: 11pt; color: black;" lang="EN-US"> JAXB</span><span style="font-size: 11pt; font-family: 宋体; color: black;">接口提供了比</span><span style="font-size: 11pt; color: black;" lang="EN-US">SAX</span><span style="font-size: 11pt; font-family: 宋体; color: black;">和</span><span style="font-size: 11pt; color: black;" lang="EN-US">DOM</span><span style="font-size: 11pt; font-family: 宋体; color: black;">更高级的方法来处理</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">文档。它提供的特性可以在</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">数据和</span><span style="font-size: 11pt; color: black;" lang="EN-US">Java</span><span style="font-size: 11pt; font-family: 宋体; color: black;">类之间互相映射，提供了一个简单的方法来转换</span><span style="font-size: 11pt; color: black;" lang="EN-US">XML</span><span style="font-size: 11pt; font-family: 宋体; color: black;">数据。它比逐个解析标记更简单。</span></p>]]></description>
</item><item>
<title><![CDATA[如何研究您行业竞争对手？对手弱点就是您机会！]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32258</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:47:46</pubDate>
<description><![CDATA[作者：<a href="http://blog.enet.com.cn/blog.php?uid-65.html">dc0613</a> <span>发表日期：2007-12-28</span> <span style="cursor: pointer;" onclick="clipboardData.setData('Text','http://blog.enet.com.cn/article.php?type=blog&itemid=199')">复制链接</span> <span style="cursor: pointer;" onclick="Addboxes('collecitems','199');">收藏</span>
				<div class="rank"> <span class="fr">欢迎到 <a href="http://blog.enet.com.cn/blog.php?uid-65.html" class="input"><b>dc0613</b></a> 的个人主页看更多内容</span> <a href="http://blog.enet.com.cn/article.php?type-blog-itemid-199.html">阅读全文</a> <span class="blue">(5305)</span> | <a href="http://blog.enet.com.cn/article.php?type-blog-cid-2-itemid-199.html#c">回复</a> <span class="blue">(<span id="rsum">8</span>)</span> | <a href="http://blog.enet.com.cn/user_index.php?action-push-itemid-199.html">推送</a> </div>
				
				
				<div class="post-content">
					<p>
						
					在探究许多公司价值观后发现，对于“什么对公司最重要”的回答中，什么都有，说法不一。有人说客户第一，有人说服务第一，有人说买家第一，诚信第一，品牌第一。。。<span style="display: none;"> 'lmnS
?&gt; </span>&nbsp;<br>
<span style="display: none;"> _t\aCty2FD </span>&nbsp;<br>
在启洋科技的价值观中，“保持竞争性”被放在了第一条。因为我们认为，在这个充满竞争的社会中，公司存在和发展之本是竞争性！<span style="display: none;"> @T,QGm8 </span>&nbsp;<br>
<span style="display: none;"> [$bE$}E3&gt;[ </span>&nbsp;<br>
这里的竞争性指的是与竞争对手相比较的整体上的生意的竞争优势，它包含了产品品质、服务、价格、理念等等。<span style="display: none;"> }F"&gt;A
2oL\ </span>&nbsp;<br>
<span style="display: none;"> jfdtQ37u@ </span>&nbsp;<br>
因此，不管您处于什么阶段：正在考虑创业，创业的初期，发展阶段，快速成长，转型期，研究行业现在的和潜在的竞争对手状况，如何保持自身的竞争性显得尤为重要。<span style="display: none;"> &amp;!F#NB </span>&nbsp;<br>
<span style="display: none;"> 6mtPzDJ, </span>&nbsp;<br>
保持竞争性从研究竞争对手开始。这里向您介绍如何通过对网络中对手网站的研究，获取有价值信息的正确思路。<span style="display: none;"> p@	9'_9h </span>&nbsp;<br>
<span style="display: none;"> A_6Kz! </span>&nbsp;<br>
一，确认行业领先者，您与其竞争和赶超的对象。<span style="display: none;"> ,V6SOxT|" </span>&nbsp;<br>
<span style="display: none;"> F6m o#K </span>&nbsp;<br>
通过雅虎和DMOZ这两个大的目录型搜索引擎，查找出您行业主要竞争对手，罗列这些对手，访问这些对手的网站，观察他们的公司规模、所提供的产品和服务。<span style="display: none;"> "Zp"'|miW&gt; </span>&nbsp;<br>
<span style="display: none;"> 5?ky7
s </span>&nbsp;<br>
二，缩小研究对手，锁定行业前三或前五，仔细研究他们的网站。<span style="display: none;"> uu	p4 </span>&nbsp;<br>
<span style="display: none;"> 1
n#0'?uN </span>&nbsp;<br>
他们提供什么产品和服务。注意您与他们是否存在不同？不同在什么地方。这些是否是您的生意机会。 <span style="display: none;"> urq5|4 </span>&nbsp;<br>
这些网站的视觉、客户感受和网站主要功能。 <span style="display: none;"> 6c;Ri </span>&nbsp;<br>
他们的网络营销做得怎么样？譬如在什么地方做什么广告，是否在做网上舆论宣传？是否有与媒体面谈，是否有做过演讲。 <span style="display: none;"> cNBKE^|7js </span>&nbsp;<br>
从客户的角度评价这些对手的优势和劣势。 <span style="display: none;"> ujJz5 </span>&nbsp;<br>
归纳他们的生意策略是什么？ <span style="display: none;"> p0_(E|hg-? </span>&nbsp;<br>
三，发现差异发现机会，制定正确的策略。<span style="display: none;"> %}jYfl6&gt; </span>&nbsp;<br>
<span style="display: none;"> c"FqA[,r$1 </span>&nbsp;<br>
- 对手的优势是否是您的劣势？<span style="display: none;"> ]9qCPj;yw </span>&nbsp;<br>
- 对手的劣势是否是您的优势？<span style="display: none;"> A}jjDkU|h </span>&nbsp;<br>
<span style="display: none;"> HPzS?Kq)X </span>&nbsp;<br>
对手是否强大到您无法与其抗争？如果是，充分了解您自己和对手，重新定位自己。<span style="display: none;"> =ZVJjH?t} </span>&nbsp;<br>
<span style="display: none;"> 5J5VR2t
 </span>&nbsp;<br>
不同的生意定位决定了不同的行业对手。您的定位决定了您要与谁竞争，而且您有能力击败您的对手。<span style="display: none;"> &lt;p5Rzm| </span>&nbsp;<br>
<span style="display: none;"> G%v9[D- </span>&nbsp;<br>
试着发现您与竞争对手的差异，试着发现什么是竞争对手不能提供而您能做到的东西！也就是努力发现一个存在的市场，只有您能满足这个市场的需求，而他人做不到。这就是您最大的生意机会！<span style="display: none;"> R^?ehh(U </span>&nbsp;<br>
<span style="display: none;"> md~h[YR{%{ </span>&nbsp;<br>
四，确认竞争对手主要的网络营销手段。<span style="display: none;"> Bh)Hfc~O0 </span>&nbsp;<br>
<span style="display: none;"> 2As(qg" </span>&nbsp;<br>
1，从ALEXA中得知您竞争对手网站的主要流量从哪里来，您是否也能获得这些渠道的流量。<span style="display: none;"> gzoi*(azQ </span>&nbsp;<br>
2，对手在主要搜索引擎中的推广手段是什么？选择什么关键词，什么搜索引擎，什么排序？<span style="display: none;"> ;o&amp;t-lw </span>&nbsp;<br>
3，对手是否在行业门户中做广告？<span style="display: none;"> .^OM](2GD </span>&nbsp;<br>
4，对手是否在做邮件营销？<span style="display: none;"> $S&lt;r@%\YS </span>&nbsp;<br>
5，对手还有其他营销渠道？<span style="display: none;"> s%GtmSs6uF </span>&nbsp;<br>
<span style="display: none;"> )dv=U35F.h </span>&nbsp;<br>
<span style="display: none;"> ?be(IyY*@ </span>&nbsp;<br>
没有一个网站十全十美。事实上，我们观察到的现象是，许多大型知名网站还存在许多严重的大问题。<span style="display: none;"> dw+Rx-H% </span>&nbsp;<br>
<span style="display: none;"> w/R7sJ*H% </span>&nbsp;<br>
当强调的是：“保持竞争性”是公司生存和发展之本！实在没有必要追求生意的完美，因为完美需要付出高昂的代价。保持竞争性是永恒的现实的纲领！ 
					
					</p>
				</div>]]></description>
</item><item>
<title><![CDATA[企业架构师必须为SaaS进行科学规划]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32257</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:44:53</pubDate>
<description><![CDATA[<div>
		         				
				2008-02-03 09:34
				作者：小伟 编译
				来源：eNet硅谷动力
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>企业架构与SaaS的关系是什么？现在，很多计划、运营并建立自己的企业架构的人都忽略了SaaS。

　　
						[关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C6%F3%D2%B5%BC%DC%B9%B9" class="cyewunder" target="_blank">企业架构</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=SaaS" class="cyewunder" target="_blank">SaaS</a>
		          		    			</div>	
			　
　【eNet硅谷动力专稿】这个星期，国际标准化团体Opengroup在旧金山举办了企业架构实践者大会（Enterprise
Architecture Practitioners
Conference），我应邀作了发言。而去年夏天在德克萨斯州奥斯汀和德克萨斯州市举办的夏季会议上我做了主题发言，而这次会议，我也要做定调演讲。
企业架构与SaaS的关系是什么？现在，很多计划、运营并建立自己的企业架构的人都忽略了SaaS。
<br>
<br>　　SaaS就像任何应用一样，是适合企业架构的。其它系统，无论是新系统还是老系统，都必须与通过SaaS方式交付的系统进行交互，并且它们确
实是企业架构的一部分。很多企业建筑师都否认这个事实并且忽略了SaaS的使用，本质上，他们将SaaS看作一个网站，而不是一个企业应用。千万不要这么
做。
<br>
<br>　　的确，随着时间的推移，SaaS的使用只会越来越普及。在全球2000强企业中，大约有百分之二十至百分之三十的企业使用SaaS交付商业应用。SaaS作用像其它企业系统一样，本身需要运行良好，并且能很好的同其它用户、原有系统协同工作。 
<br>
<br>　　下面介绍几个使这种协同作用充分发挥的小窍门：
<br>
<br>　　首先，当定义在整个企业范围内使用公共语义模型时，一定要考虑SaaS应用。在许多情况下，因为缺乏与现有系统的整合以及没有一个共同的机制将SaaS处理成抽象和公共数据，公共语义模型都没有考虑SaaS。
<br>
<br>　　第二，确定SaaS供应商提供的接口（API和Web服务）。要在选择供应商之前做这些事情，而不要拖到选择供应商之后。有不少企业架构师都
被陷入了这样的困境：他们通过SaaS交付的系统没有明确的同其它系统交互的方式。如果你发现自己正处于这种情况，摆在你面前的还将有大量的工作要做。
<br>
<br>　　第三，要时刻牢记SaaS模式的系统属于企业应用的范围，并且也要按照企业应用管理它们。在许多情况下，当谈到SaaS时，企业架构师拒绝将
它们当作企业应用，尽管事实上这些SaaS模式的系统正在变得越来越关键。如果你不相信，只需看看如果Salesforce.com突然停止运转了将发生
什么情况就知道了。
<br>
<br>　　最后，当做长远规划时，要考虑SaaS。随着时间的推移，SaaS系统也将会发生改变，它们会与现在也将大有不同。因此，就未来发展方向而言，你一定要与供应商密切合作，仔细交流与您的供应商。总之，当你为下一代企业架构规划时，一定要考虑SaaS。
<br>
]]></description>
</item><item>
<title><![CDATA[2007商用软件行业盘点与08年趋势预测]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32256</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:42:15</pubDate>
<description><![CDATA[<div>
		         				
				2008-02-03 17:58
				作者：嘉文
				来源：eNet硅谷动力
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>2007
年的商用软件市场，呈现出一片欣欣向荣的繁华景象。很多厂商争先发布了新产品，或对其现有产品进行重大升级。微软新一代操作系统 Windows
VISTA
备受关注。国外厂商与国内厂商、大型软件厂商与小型厂商铺开了白热化的市场竞争世态，中小型企业市场成了争相抢夺的焦点。SOA、SaaS、移动商务等软
件热点由概念炒作逐渐紧贴地面飞行。软件产业持续疯狂并购，改写了现有的市场格局......下面是对07年商用软件市场的热点盘点和2008奥运年的趋
势预测。 [关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C9%CC%D3%C3%C8%ED%BC%FE" class="cyewunder" target="_blank">商用软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=Vista" class="cyewunder" target="_blank">Vista</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%D0%AD%CD%AC%C8%ED%BC%FE" class="cyewunder" target="_blank">协同软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=SaaS" class="cyewunder" target="_blank">SaaS</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=SOA" class="cyewunder" target="_blank">SOA</a>
		          		    			</div>	
			<div class="contenttxt">　
　【eNet硅谷动力专稿】2007年的商用软件市场，呈现出一片欣欣向荣的繁华景象。很多厂商争先发布了新产品，或对其现有产品进行重大升级。微软新一
代操作系统 Windows VISTA
备受关注。国外厂商与国内厂商、大型软件厂商与小型厂商铺开了白热化的市场竞争世态，中小型企业市场成了争相抢夺的焦点。SOA、SaaS、移动商务等软
件热点由概念炒作逐渐紧贴地面飞行。软件产业持续疯狂并购，改写了现有的市场格局......下面是对07年商用软件市场的热点盘点和2008奥运年的趋
势预测。
<br>
<br>　　<b>一、Windows Vista 问世，安全性和兼容性成焦点</b>
<br>
<br>　　2007年1月30日，微软在全球主要市场同步发布了面向消费者的Vista版本。100天以后，微软对外宣称Windows Vista销售量近4000万份，其中高级版本占到了总销售的78%。 
<br>
<br>　　Vista据称其安全性和稳定性都达到有史以来最高，国内众多的应用软件厂商均以通过Vista认证做为产品安全性得到认可的重要标志。同
时，Vista的兼容性也一度备受争议。企业版本进而发布，报告显示，对Vista进行评估和测试的企业比例由2007年2月份时的29%提高到了
2007年11月初的48%。虽然多数企业对于XP系统存在依赖性，但很多企业表示将逐步迁移到Vista。
<br>
<br>　　<b>2008趋势预测：</b>
<br>
<br>　　微软在08年依旧会为Windows
Vista的大规模普及进行不懈的努力，自家兄弟XP仍是Vista的强有力对手。Linux在桌面OS市场的活跃也不可忽视。08年初，微软将有三大产
品的重要版本问世，Windows Server 2008、 SQL Server 2008和Visual Stidio
2008的推出，势必将吸引大家的眼球。
<br>
<br>　　<b>二、企业巨头的并购活动加剧</b>
<br>
<br>　　在软件领域，规模经济体现得淋漓尽致。客户希望他们所使用软件的供应商仍将在未来数年内呆在该行业里，这样就能为他们所购买的昂贵的许可继续提供技术服务。07年几次大型的收购集中在商业智能领域。甲骨文收购了Hyperion；<a href="http://ad.cn.doubleclick.net/clk;102718178;17063292;e?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=sap&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle1" target="_blank" class="article">SAP</a>收购了Business Objects；IBM 收购了Cognos。现在，软件行业的并购活动已经基本告一段落，只有一些扫尾工作还有待进一步完成。在大型商业软件领域，甲骨文和和SAP几乎控制了一半左右的全球市场份额。
<br>
<br>　　<b>2008趋势预测：</b>
<br>
<br>　　O8年初，甲骨文收购BEA，将并购的热潮延续到中间件市场。软件厂商间的并购在08年会继续上演。规模优势更加明显，国内小型厂商需灵活应对，推出更有竞争力的产品，方能立足。
<br>
<br>　　<b>三、 SOA创新加速，不再是“空中楼阁”</b>
<br>
<br>　　2007年，我们开始看到越来越多的公司推出SOA方法和相关的工具、平台用于创新。投资回报率并不遥远。SOA不再是厂商营销部门强加给用户的一个虚无缥缈的空中楼阁。并且已经由以产品为中心向以客户为中心进行转变。
<br>
<br>　　从中间件软件厂商来看，BEA通过BEA SOA
3600战略转向SOA；IBM则侧重于在不同行业打造SOA应用样板，提高对用户选择的影响力；微软推出了代号为Oslo的计划，布置自己的SOA战略
蓝图，另外，Oracle、SAP等厂商也通过SOA把企业应用解决方案串连起来。SOA标准及技术的逐步发展将提高IT投资的效率和收益。用户期待着
SOA成熟的同时谨慎地选择切入点。
<br>
<br>　　国外大型厂商开始看好国内市场，纷纷与国内厂商合作。2007年6月，金蝶引入IBM战略投资，与其一起推广SOA是双方合作的主要内容；几
天之后，浪潮与IBM在山东成立中国首家SOA创新中心；8月21日，用友紧跟浪潮之后，也牵手IBM，成立SOA创新中心；而新中大也在早前选择微软
的.NET平台构建基于SOA的应用软件平台。
<br>
<br>　　<b>2008年趋势预测：</b>
<br>
<br>　　从O7年的并购得知，SOA将以BI为入口进入传统软件市场，并将渗透到<a href="http://ad.cn.doubleclick.net/clk;102718245;17080049;y?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=ERP&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle9" target="_blank" class="article">ERP</a>等
企业管理软件。面向服务的BI产品毫无疑问会成为2008年的一个看点。SOA的标准也会更加完善。08年，SOA将无处不在。中间件国外厂商仍然占主导
地位，主流厂商包括IBM、BEA、甲骨文等，而国内一些中间件厂商也已经具备相当的实力，形成了包括东方通、金蝶、中创、普元等在内的一批中间件专业厂
商，东软、用友、信雅达等应用集成商也大量投入中间件产品的研发，国产中间件已经形成了比较完整的产品体系。<br>　　<b>四、SaaS热潮铺面而来 传统厂商在行动</b>
<br>
<br>　　SaaS与ASP有很多相似之处。而曾经风靡的ASP却在时代进程中陨落了。有人担心SaaS会不会重蹈ASP的覆辙。虽然安全性等遭受了众多质疑，依旧没人能抵挡SaaS的热潮。
<br>
<br>　　07年，按需定制的先驱Salesforce成绩依然骄人。很多中小厂商是在Salesforce的成绩鼓舞下，开展其SaaS业务的。而07年之前，与SaaS唱反调的主流软件厂商，<a href="http://ad.cn.doubleclick.net/clk;102718178;17063292;e?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=sap&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle1" target="_blank" class="article">SAP</a>、
微软等，也对SaaS产生好感，纷纷推出中小型企业适用的SaaS产品。SAP推出Business ByDesign、微软推出Dynamics
CRM，都将目标锁定中小型企业。甲骨文也使Siebel向SaaS方向发展。Google推出了名为Google Apps Premium
Edition的套装软件，提供了电子邮件、即时通讯、日历、字处理和电子表格等功能，在桌面办公工具软件领域正式向微软Office发起了挑战。国内，
阿里软件、神码在线等国内SaaS公司成立，共同聚焦中小企业市场，金蝶携手IBM推出“友商网”，金算盘发布全程电子商务平台，八百客推出了
800App整合平台。
<br>
<br>　　<b>2008年趋势预测：</b>
<br>
<br>　　中国3000万中小企业的市场魅力巨大，各SaaS厂商能否提供提供真正贴合中小企业需求的产品，成为一大挑战。另外，消除企业对SaaS产
品安全性的顾虑，也成为不可逾越的沟坎。SaaS厂商与传统软件厂商的竞争会越来越剧烈。在技术方面，SOA与SaaS有待整合。
<br>
<br>　　<b>五、管理软件市场增长放缓 行业化、专业化成趋势</b>
<br>
<br>　　2007年，以<a href="http://ad.cn.doubleclick.net/clk;102718245;17080049;y?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=ERP&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle9" target="_blank" class="article">ERP</a>为
代表的国内管理软件市场是活跃的，面对的行业市场的不断细化，管理软件也有所突破，并开展新的业务。用友在07年继续主打移动商务市场，打造移动商街，推
行M-ERP。07年上半年，金蝶推出EAS
V5.2，并通过了IBM在SOA标准的测试，在高端ERP上有所突破。IBM及雷曼兄弟购入金蝶国际约7.7%的股份，成为其重要战略投资者。代表国内
的厂商开始投足国际市场。神州数码则专注于制造业，走区域覆盖策略，高端产品易拓ERP也在于SAP等国际厂商的产品抗衡。顺和达推出成长型企业管理软件
替换产品ERP e4。ERP的行业化版本及解决方案越来越受关注。
<br>
<br>　　<b>2008年趋势预测：</b>
<br>
<br>　　展望2008，国内ERP市场将继续在繁荣的道路上前进，软件厂商和用户都渐趋理性。随着用户对管理软件的认识越来越深入，软件厂商将抛弃概
念性的炒作宣传，无序竞争也会得到一定程度的有效控制，而一些新的营销方式将会陆续进入软件行业。同时，管理软件行业将进一步细分，厂商将结合各个行业大
部分用户的普遍需求，设计和开发一系列标准化程度比较高、模块比较精练的产品，可以满足各个细分行业的特点，其主要模块更适用于各个细分行业大部分用户的
需求。另外，在企业总数中占据庞大比例的中小型企业依然是软件厂商竞相争夺的客户目标。
<br>
<br>　　<b>六、协同软件市场平台化趋势显著 标准未统一</b>
<br>
<br>　　07年的协同市场进入了稳步增长的时期，中小企业和政府成了协同市场的主推力量。协同软件开始像平台化发展。厂商仍然是众多中小厂商共同瓜分
市场，产品形形色色。用友致远在普及型产品A6成功占领市场的基础上，推出了A8高端协同软件。点击科技发布了其新一代企业综合通讯平台GK-
Express的最新版本3.2版，金和则推出了协同管理平台C6，南派代表合强软件则推出A8协同办公系统，而作为中小用户单位的主要代表通达OA则在
版本的易用化和人性化上下功夫，发布了Office Anywhere
2008版，提供365天免费使用和用户终身服务与升级，其创举在业界应是罕见的。从OA行业特征分析，制造、流通、机关事业形成了三大细分市场，主流领
导品牌有用友致远、金和、点击、通达、浪潮等，在中小软件市场，用友、通达、协达等占据了领先位置，泛微、浪潮紧随其后；在政府市场，用友、金和、浪潮、
慧点则处于市场前列。
<br>
<br>　　<b>2008年趋势预测：</b>
<br>
<br>　　2008年，统一通信和SaaS将对协同软件产品影响巨大。面对企业办公协同跨地域的需求，统一通信将成市场发展的趋势，软件厂商与电信解决
方案提供商、系统集成商、软件供应商、等的合作增强。SaaS模式的协同产品先期投入少，无需相关软硬件购买和专业技术人员维护的特点将受到中小企业用户
更多的认可，其灵活的租用模式为企业提供了更为便利的使用。但是，标准的制定和统一，仍然是协同软件产品市场的一大挑战。<a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a><br><br><span style="font-family: 宋体;"></span><br></div>]]></description>
</item><item>
<title><![CDATA[国内五大杀毒软件评测 教股民选合适软件]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32255</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:39:05</pubDate>
<description><![CDATA[<div>
		         				
				2007-06-18 09:22
				作者：
				来源：赛迪网
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>股
民上网炒股，或者进行金融交易，最大的担心是帐号、密码以及私人信息被盗，电脑系统遭到攻击导致效能降低或瘫痪等网络安全问题。从网络安全和病毒防护的角
度，证券机构的网络系统和个人电脑系统都是一样的，区别只是证券机构的系统更庞大、复杂，安全性更高。因为金融、证券行业的特殊性，网络安全无小事，所以
在对网络安全设备和软件的选型上是慎重又慎重。目前，国内金融、证券机构的网络安全软件以趋势、诺顿、CA等为主流，主要是从技术和稳定性的角度考虑比较
多。一般企业级网络安全软件，国际产品在技术上普遍比国内要高。当然，国内的有些网络安全软件也比较有特色。 [关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C8%ED%BC%FE" class="cyewunder" target="_blank">软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C9%B1%B6%BE%C8%ED%BC%FE" class="cyewunder" target="_blank">杀毒软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C6%C0%B2%E2" class="cyewunder" target="_blank">评测</a>
		          		    			</div>	
			　
　股民上网炒股，或者进行金融交易，最大的担心是帐号、密码以及私人信息被盗，电脑系统遭到攻击导致效能降低或瘫痪等网络安全问题。从网络安全和病毒防护
的角度，证券机构的网络系统和个人电脑系统都是一样的，区别只是证券机构的系统更庞大、复杂，安全性更高。因为金融、证券行业的特殊性，网络安全无小事，
所以在对网络安全设备和软件的选型上是慎重又慎重。目前，国内金融、证券机构的网络安全软件以趋势、诺顿、CA等为主流，主要是从技术和稳定性的角度考虑
比较多。一般企业级网络安全软件，国际产品在技术上普遍比国内要高。当然，国内的有些网络安全软件也比较有特色。 <br>
<br>　　作为证券机构的IT技术人员，我们通常不太关注个人网络安全产品，比如杀毒软件。但是，最近股民比较多，有很多股民都是通过网络进行交易，其中的安全问题引起了我们的注意。需要指出的是，对于企业级系统，大家绝对放心，一般的病毒和黑客不可能侵入。 
<br>
<br>　　但是对于个人网络系统，鉴于个人网络安全知识和水平的不同，安全风险显然要大得多。 
<br>
<br>　　关于个人网络安全系统，网上有很多知识，包括很多利用Windows系统查杀病毒。很多知识和技能对于非IT专业的普通股民来说，实在太复
杂，也不保险。坦率地说，你掌握的电脑知识再丰富，也不如杀毒软件厂商的研发团队掌握的知识丰富。所以，完全依靠电脑自带的Windows系统操作来查
毒、杀毒的方法，虽然省钱，但对于所有股民都是不足取的。 <br>
<br>　　我的建议很简单，必须安装杀毒软件和防火墙，才是防御病毒和黑客侵入的有效手段。其他的方法都是冒险之举。
那么，如何选择适合自己的杀毒软件和防火墙（自带防火墙的杀毒软件更好）？关于这个问题，周围的朋友问过我，我认为不好回答。因为，金融、证券机构的IT
技术人员的想法和实践并不能指导广大股民。所谓“病从口入”，病毒对于企业系统的破坏和攻击常常从 <br>
<br>　　工作人员的终端开始。由于工作的性质，导致我们对个人的网络安全都十分重视，对于杀毒软件的选择也十分挑剔。 
<br>
<br>　　就我本人已经周围的同事、同行而言，大家安装趋势杀毒软件比较多，也有的安装诺顿的杀毒软件。主要原因是：一，考虑到与企业网络安全系统的兼
容问题。趋势、诺顿在金融、证券机构占有很大的份额；二、可能是一种信任关系。大家和趋势、诺顿接触比较多，时间也长，彼此比较了解，所以趋势、诺顿有个
人产品后，技术部门就建议大家都安装这些杀毒软件；三、性价比。比如，趋势杀毒软件可同时安装在三台电脑上，可管理局域网。这样可以节省成本。 <br>
<br>　　这是圈内的看法。如果跳出金融、证券圈外，我想应该不能这么单纯。个人认为应该因人而异，可以选择的杀毒软件比较多。至于如何选型，我并没有
下最终结论的能力。因此，我把今年初技术部内部针对个别个人杀毒软件的一个测试拿出来，并结合股民的需求，从较为专业的角度说一说。而究竟如何选择，还是
要根据股民的实际情况。我不会说任何不负责任的话。 <br>
<br>　　选择《金山毒霸2007》、《瑞星2007》、《江民KV2007》、《趋势杀毒软件PC-cillin2007》和《Norton
AntiVirus
2007》五款常用软件评测，为股民选择杀毒软件时，提供参考。测试项目包括系统资源占用评测、木马病毒查杀能力评测、隐私防保功能评测、嵌入式防毒评
测、网络反钓鱼评测和病毒库主动升级评测。 <br>
<br>　　一、系统资源占用评测 
<br>
<br>　　对于股民来说，时间就是金钱，堵单无亦于堵心，所以系统的稳定和网络的畅通至关重要。因此选择一款系统资源占用小的反病毒软件，应该在考虑因素之内。 
<br>
<br>　　测试方法是：每安装一款反病毒软件，都把它升级到最新的病毒库。接着空置电脑20分钟不进行任何操作，然后打开资源管理器查看软件各组件的资源占用情况，把它们相加得出一个数据。 
<br>
<br>　　由于股民在看盘的过程中，基本不会进行查毒操作，因此不再进行病毒扫描的资源占用和CPU占用率的测试。 
<br>
<br>　　从这五款软件的测试结果来看，《趋势杀毒软件2007》给我们留下了深刻的印象，它进程中只有两个文件，仅占用了14MB的内存空间。而
《Norton AntiVirus 2007》与之相比占用的资源要多的多，大约在25MB左右，也是参测软件中占用资源最多的一款产品。 <br>
<br>　　《金山毒霸2007》、《瑞星2007》和《江民KV2007》虽然都集成了网络防火墙等模块，但是在系统资源占用的控制上还是表现的不错，基本都控制在20MB以下。 
<br>
<br>　　在这里需要说明一下的是，杀毒软件的进程资源占用与软件运行而造成的资源占用有很大不同，这里涉及到svchost这个共享进程，另外所监控的项目和文件数量越多，所占用的资源也越大，所以以上数据仅供参考。 
<br>
<br>　　二、木马病毒查杀能力评测 
<br>
<br>　　随着网络的发展，各类病毒层出不穷，其中危险最大的一类就是木马病毒，以股民们谈之色变的“证券大盗(Trojan／PSW.Soufan)”为例，它可以盗取多家证券交易系统的交易账户和密码，然后黑客通过这些盗取的帐号和密码可以恶意操纵帐户内的股票，例如通过 
<br>
<br>　　高买低卖、低卖高买等，赚取中间的差价，这会给被盗账号的股民带来巨大的经济损失。所以最适合股民的反病毒软件，必然应该是一款查杀木马病毒能力高强的软件。 
<br>
<br>　　我们选取了100个病毒样本对各款软件进行了测试，其中查杀率最高的是《趋势杀毒软件2007》，它的查杀率最令人满意。其他表现不错的依次是《金山毒霸2007》、《瑞星2007》、《江民KV2007》、《Norton AntiVirus 2007》。 
<br>
<br>　　三、隐私防保功能评测 
<br>
<br>　　查杀能力非常关键，对银行帐号和股票帐号的保护工作也必须做好。目前许多反病毒软件中都带有隐私保护功能，把银行帐户、个人电话、各类密码等
信息输入到软件数据库以后，当有人通过邮件、QQ等IM聊天工具向外发送这些敏感信息时，反病毒软件会立刻进来拦截并发出提示警告，这对于股民来说是一个
非常有用的功能。 <br>
<br>　　《趋势杀毒软件2007》在“个人网络和防火墙”中有单独的“密码保护”选项，在操作个人数据时候，可以选择设置密码，保证数据的安全，用户也不用担心这些信息被人偷窥。 
<br>
<br>　　《江民KV2007》同样具有上述功能，而且提供了信息导入/导出功能，操作起来比较方便。 
<br>
<br>　　四、嵌入式防毒评测 
<br>
<br>　　股民除了网上炒股以外，还会经常通过QQ等即时通讯软件与其他股友进行交流，另外随着炒股的火热，各种各样的股票群也不断增多。这些网络手段
虽然方便了股民，却也带来了不少的安全隐患。嵌入式防火墙，可以与即时通讯工具紧密结合提供安全防护，它的最大特点就是无需开启主程序，即可独立工作。
<br>
<br>　　《趋势杀毒软件2007》中的聊天工具与电子邮件嵌入防毒，提供的保护对象较多，除了可以对QQ、ICQ、MSN、OFFICE等进行保护
外，还可以进行Web站点访问保护。《江民KV2007》可以嵌入OFFICE办公组件、FLASHGET、WINRAR、WINZIP等软件。《瑞星
2007》提供了OFFICE和IE嵌入防毒。《Norton AntiVirus
2007》则在主动防御模块中提供了OFFICE、程序完整性等多项防护措施。 <br>
<br>　　五、网络反钓鱼评测 
<br>
<br>　　作为股民经常要通过网上银行进行银证转帐，还要浏览各类财经网站、论坛、甚至是个人的股票博客，以便打深各类消息，这很容易掉进网络钓鱼的陷阱当中。网络钓鱼是网络上非常猖獗的一种诈骗方式，它的传播手段众多、技术更新快，是对网络支付和网银安全的最大威胁。 
<br>
<br>　　这类钓鱼网站如果不细心很难进行防范，因为它们通常设计得与真实网站一模一样，所以反病毒软件中如果带有自动识别钓鱼网站的功能，对股民来说是多了一道保护伞。 
<br>
<br>　　趋势杀毒软件在反钓鱼方面积累极其丰富的经验，《趋势杀毒软件2007》中的放网络钓鱼欺诈，除了间谍软件防护以外，还有网络钓鱼警报。在浏
览器中输入一些常用的支付网站时候，软件会自动检测网址，发现钓鱼网站时自动报警，提醒股民不要上当受骗。创新智能网络诈骗侦测技术，能自动封锁已知或未
知的诈骗网站，避免股民误上诈骗网站，机密数据被骗。 <br>
<br>　　六、病毒库主动升级评测 
<br>
<br>　　病毒特征码库作为一种简捷有效的查杀病毒方式，发展到今天比拼的更多的是病毒库升级时效及更新频率。《金山毒霸》和《瑞星》一般每天升级三
次，《Norton
AntiVirus》、《江民2007》和《趋势杀毒软件2007》也都每天至少升级一次。其中大多数软件都具备自动和定时升级、以及系统安全漏洞修复功
能，免去了用户的后顾之忧。 <br>
<br>　　除了这些常规升级之外，面对突发病毒和事件的应急反应速度，也是衡量一款产品服务质量的重要标准。例如：去年年末，台湾地震引发的光缆断裂，
就曾经让许多卡巴斯基的国内用户无法更新病毒库，事后他们在国内架设了临时服务器才有所缓解。在这方面，国产软件优势比较明显。 <br>
<br>　　另外，软件和病毒库升级在注重数量的同时，还应注意质量，最近网上闹得沸沸扬扬的诺顿和卡巴斯基误杀门事件，给所有的厂家敲响了一记警钟。这件事也造成了诺顿在金融、证券机构的不利影响。 
<br>
<br>　　评测综述 
<br>
<br>　　测试的结果比较综合，各项评测项目成绩见下表。我认为上述的杀毒软件都具有各自的特色和不足。但是，从证券从业人士的视角看，一款杀毒能力优
秀、又具备多样功能和人性化功能的软件应该是股民的最佳选择。前段时间，国家反病毒联合实验室（China
Labs）的专家将危害网银系统最大的病毒、侵害行为概括为“五毒四害”，非常准确。个人认为，股民选择杀毒软件的基本要求是能够抵御“五毒四害”。 <br>
<br>　　目前，流行市面上的还有卡巴斯基、麦咖啡等个人杀毒软件，网络褒贬不一。因为在测试中并没有作为样本选择，因此不便妄加评论。 
<br>
<br>　　通过此次评测，我想股民朋友们不光在自己心里都选好了最适合自己的反病毒软件，而且也学到了一些安全防范知识。只有提高安全意识，坚决运用杀毒软件并灵活运用好手中的杀毒软件，才能最大限度的保证我们的安全。<a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a>]]></description>
</item><item>
<title><![CDATA[SaaS软件应用模式将创造软件业新契机]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32254</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:35:35</pubDate>
<description><![CDATA[<div>
		         				
				2007-06-18 10:23
				作者：
				来源：北京商报
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe src="http://www.enet.com.cn/enetshow.shtml?Pool=ciobanner" id="ciobanner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table>

</div>



       
			<!--正文-->
			
							<div class="ciodigest"><b>[摘要] </b>盗
版与恶性价格竞争是中国软件产业面临的两大痼疾，随着互联网技术的发展和应用软件的成熟，SaaS（Software-as-a-service，
&lt;软件即服务&gt;）作为一种全新的软件应用模式在21世纪兴起，以此为契机，有望为软件产业带来深刻变革，使软件成为社会生产和民众生活的一项
不可或缺的服务，将软件产业与现代服务业的发展紧密融合，为软件产业开辟可持续发展的广阔空间。</div>
									
								
			　
　盗版与恶性价格竞争是中国软件产业面临的两大痼疾，随着互联网技术的发展和应用软件的成熟，SaaS（Software-as-a-service，
&lt;软件即服务&gt;）作为一种全新的软件应用模式在21世纪兴起，以此为契机，有望为软件产业带来深刻变革，使软件成为社会生产和民众生活的一项
不可或缺的服务，将软件产业与现代服务业的发展紧密融合，为软件产业开辟可持续发展的广阔空间。
<br>
<br>　　软件服务化带来服务市场的较量，这有助于带动软件企业跳出同质产品恶性竞争的怪圈，着力提升核心竞争力。北京市科委洞悉软件服务化这一趋势，引导软件企业贴近用户、贴近应用，挖掘软件价值，并部署科技项目给予引导和支持。
<br>
<br>　　移动生活、移动商务、移动政务这三大代表未来城市信息化发展方向的各种应用，随着北京市科委“移动信息化新技术应用”项目的实施而渗透至各个领域。
<br>
<br>　　“这一项目旨在利用技术手段使终端用户能够低成本地获取各种有价值的信息，使市民、郊区农民、流动人口获益。”该项目主管、北京软件与信息服
务业促进中心的江平介绍说，在中国移动通信集团北京有限公司搭建的移动城市综合业务平台的基础上，北京邮电大学无线新技术研究所、北京市平谷区信息中心、
北京图盟科技有限公司等7家单位分工协作，从资源整合、应用推广、构建产业链等多方面打造移动城市，软件服务将渗透至出行导航、企业管理、城市应急等多个
方面。
<br>
<br>　　软件服务化，除了使普通百姓获益，更能惠及基础薄、资金少、人才缺的中小企业。北京市科委于2004年启动的“首都企业协同e化-ASP模式
示范工程项目”，以产业联盟的形式对外运营和推广，组成了由北京美髯公科技发展有限公司、首都信息发展股份有限公司、艾旺计算机信息网络系统（北京）有限
公司等15家公司组成的ASP服务联盟，为中小企业提供基础电信、咨询设计、软件开发和平台运营等服务，辅助它们完成信息化过程。ASP
（Application Service
Provider，应用服务提供商）倡导“软件变服务，服务走网络”，这种高效、廉价的模式，降低了中小企业的信息化门槛，节约了信息化成本。
<br>
<br>　　软件是IT的灵魂，是自主创新最活跃的领域，软件产业是关系中国国民经济和社会发展的战略性产业。通过政策引导，使软件企业规避已知市场空间
中同质化竞争的“红海”，转而畅游于新市场空间中蕴涵丰厚回报的“蓝海”。北京软件产业发展方面的探索，在帮助企业提高技术创新和经营模式创新能力的同
时，将为中国软件产业的发展提供有益借鉴。<a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a><br>]]></description>
</item><item>
<title><![CDATA[运营方式变革 软件业卷入免费热潮]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32253</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:34:14</pubDate>
<description><![CDATA[<div>
		         				
				2007-11-23 09:26
				作者：王超
				来源：IT经理世界
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>市
场研究公司Gartner分析认为，开源软件应用的第一个阶段是情感阶段，第二个阶段是实用阶段，第三个阶段是发挥优势的阶段。现在已经进入第三个阶段。
Gartner预测，到2011年，至少80%的商业软件解决方案将包含实质性的开源软件，应用于完成重要任务的应用程序。
　　 [关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%AA%D4%B4" class="cyewunder" target="_blank">开源</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C9%CC%D2%B5%C8%ED%BC%FE" class="cyewunder" target="_blank">商业软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%CE%A2%C8%ED" class="cyewunder" target="_blank">微软</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C3%E2%B7%D1%C8%ED%BC%FE" class="cyewunder" target="_blank">免费软件</a>
		          		    			</div>	
			　　软件业正在卷入新一轮的免费浪潮，通过卖“Copy”收钱的模式已经落伍，新的业务模式层出不穷。
<br>
<br>　　1990年芬兰赫尔辛基大学的Linus Torvalds开发出Linux，开启了开源软件时代。 
<br>
<br>　　之后很长的时间里人们只是把免费的开源软件看作是软件业的异类，是对微软这样的行业霸主的挑战。17年过去了，开源软件真的已经成为了非常重
要的市场势力。市场研究公司Gartner分析认为，开源软件应用的第一个阶段是情感阶段，第二个阶段是实用阶段，第三个阶段是发挥优势的阶段。现在已经
进入第三个阶段。Gartner预测，到2011年，至少80%的商业软件解决方案将包含实质性的开源软件，应用于完成重要任务的应用程序。
<br>
<br>　　很多以前是收费的软件产品正在放弃收费。正版使用频率较高的单机版杀毒软件也打起了“免费”的算盘。趋势科技正在考虑免费让用户获得杀毒软件
及升级服务，同时希望通过推送广告到杀毒软件的界面上去获得收入。Opera在浏览器市场的占有率大约为1%（在IE和Firefox之后），它从
2007年初彻底免费之后，在桌面市场的收入反而增长了1倍以上。它与Yahoo建立战略合作伙伴关系，Yahoo成为Opera独家内置搜索引擎，
Opera分享Yahoo的搜索广告收入。
<br>
<br>　　微软是通过卖软件拷贝获得收入的商业模式的最大赢家。所以，微软在全球所做的最大营销活动就是打击盗版。它的竞争对手IBM前些时候发布了直
接针对微软Office的莲花（Lotus）“交响乐”，用户可以在IBM网站上免费下载这种软件。微软最可怕的竞争对手Google是最成功的通过软件
运营化获得成功的公司：Google的搜索是一个庞大的软件系统，但它不卖任何拷贝。而且在向市场提供免费的与微软竞争的产品供在线应用。
<br>
<br>　　免费只是表象，通过软件卖广告也只是“冰山一角”，软件运营化才是软件业正在发生的变化的实质。软件作为新经济最有代表性的产品，它的很多特
性决定了它的商业模式。比如，软件开发的成本很高，而复制的成本几乎为0；人们使用一个软件有很高的黏性：因为学会使用它要花很多时间；它有很强的使用者
规模效应，用的人越多，价值越高；它非常复杂，要不断升级；一个复杂的软件产品中的很多功能很多人很少用到；等等。所以，如何为软件付费一直是争议很大的
问题。卖方认为“用我的产品给我付钱天经地义”；而买方强调“你让我一次性为那么多我可能永远都用不上的功能付钱是不是太过分了”。所以，软件业需要更多
样的运营方式和更灵活的付费方式。而互联网为软件业带来了全新的发展空间：它使得软件的分发变得非常容易，软件的使用者和提供者互动非常方便，这些就足以
改变软件的运营方式。
<br>
<br>　　即使像<a href="http://ad.cn.doubleclick.net/clk;102718178;17063292;e?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=sap&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle1" target="_blank" class="article">SAP</a>这
样的商务软件巨头也在通过互联网发展“按需软件”，以应对来自Saleforce以及NetSuite这样的更灵活的小公司的竞争，SAP的套件对于绝大
多数用户来说都太过强大和复杂了。Adobe正在将其所有软件作为服务而不是成套软件通过Web发布。Adobe的CEO布鲁斯表示，这一转变过程可能需
要10年时间。
<br>
<br>　　在中国，因为在运营模式上没有创新，曾经热闹的教育软件市场如今哀鸿遍野。洪恩教育软件的总裁李斌称，1996年1张光盘卖120元，现在
10张光盘加2本书卖160元。而与之相对照的是，像华尔街英语这样的传统语言培训学校，早已经通过互联网开展在线课程了。在线上课作为面对面授课的补充
发挥了很好的作用。
<br>
<br>　　软件一旦运营化之后，在收入模式的创新上会走得更远。网络游戏是典型的运营着的软件，已经有卖点卡这样非常成熟的商业模式，而现在“先买再
玩”的传统销售方式也在被改变。很多游戏已经通过免费试玩迅速获得巨大的玩家基数，再通过“增值服务”获得收益：要想升级快，有好装备，就得花钱。如果玩
家舍不得钱买装备，就得在游戏中受气。越有钱、越舍得投入的玩家装备越高级，战斗时也就无往而不胜，穷玩家只能任人宰割。玩家的争强好胜正是运营商的滚滚
财源。
<br>
<br>　　一旦软件界面变成了广告载体，用户终端的价值就会凸显出来。“占领桌面”是个人软件领域的口头禅。最近265已经收购了一系列个人开发的免费
桌面软件，包括flashget、暴风影音、Windows优化大师、鱼鱼桌面秀等。收购价格一般在二三百万元。一旦这些自由软件背负了创造商业价值的责
任，就会显露出“流氓”特征，包括强行安装、恶意弹出、无法卸载、广告横行等等。这会是软件运营化之后的新问题。
<br>
<br>　　也许在人们未建立起为软件付费的观念之前，软件已经不需要付费了。<a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a>]]></description>
</item><item>
<title><![CDATA[浅谈2007年值得思考的几大软件技术问题]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32252</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:32:12</pubDate>
<description><![CDATA[<div>
		         				
				2007-06-12 09:53
				作者：dxaw
				来源：赛迪网
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>本文将07年几大软件技术问题进行探讨分析：
						[关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C8%ED%BC%FE" class="cyewunder" target="_blank">软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%CA%FD%BE%DD%BF%E2" class="cyewunder" target="_blank">数据库</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%CE%A2%C8%ED" class="cyewunder" target="_blank">微软</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%CD%BB%A7%B6%CB" class="cyewunder" target="_blank">客户端</a>
		          		    			</div>	
			　　1 网络时代数据库如何存数据? 
<br>
<br>　　数据库已经不再是存取大规模简单结构数据的时代，对于绝大多数企业来讲已经是必不可少的IT基础构建。在网络时代，企业对于文档、邮件、视频
等非结构化数据的传输、存取的需求越来越迫切。传统的关系数据库是通过2维表来存取数据，但当需要用多层表嵌套的方式来描述问题的时候，无论是处理表的关
联还是数据查询都带来了很大的不便。所以目前的主流数据库厂商都纷纷提出自己的数据存取解决方案，当然这些技术本身并不是今天来刚刚提出，只不过来自用户
需求的迫切，真正唤醒了它们。比如，目前在企业内，异构平台不同应用数据的转换传输通常会以XML格式为标准，而XML的数据结构灵活，转换为关系型去存
储查询性能很差。所以，Oracle,DB2等等都增加了对原生XML数据库特性的支持，并使用XML
qurey语言对数据进行直接查询，无需进行关系表-XML之间的转换。又比如为了适应如今面向对象设计的封装和可扩展性思想的对象数据库系统。直接对
OO模型定义的对象提供一个持久的、可共享的对象库的存储和管理。以及多维数据库，从而很容易地实现处理复杂数据模型、大数据量、高并发性访问。传统关系
型数据库已经稍显乏力，在此之上的“后关系型“数据库时代已经来到。 <br>
<br>　　2 是动态语言还是语言动态特性? 
<br>
<br>　　开发语言的变迁始终是软件领域最受关注的话题。而随着ruby所带表的动态语言的成功，一时间有不动态就不行的架势。其实不难发现，ruby
的成功其关键在于它有RoR一套优秀的框架。使它可以更加灵活的响应企业开发中快速多变的业务需求。而动态语言也就被扣上了可以提升开发效率的帽子。而编
程的效率来自许多指标，和最终应用的性能其实也并不是一个概念。如今Java平台，还是.net平台也都声称要支持ruby,而实际的意思是，它们是要吸
纳RoR框架的优势。我们也可以从C#3.0,linq中看到一些动态的特性。所以微软也好，SUN也好，它们是否会真心支持ruby还很难说。动态语言
本身的发展是否会像python一样不温不火，还是会不断被新的动态语言取代?又或者JAVA,.NET平台中加入更多动态特性，而最终吞噬了动态语言?
<br>
<br>　　3 客户端会需要多核计算吗? 
<br>
<br>　　随着，Intel
四核处理器的轰轰烈烈的发布，再次将人们的视线聚焦在了多核计算。不可否认，多核的出现是处理器发展的必然。由于受到工艺水平的限制，单纯提升主频来增加
处理器的计算性能，并不是最明智的选择。对于需要高性能计算的服务器来讲，多核计算带给他们的是更高的计算性能和更低的成本。但服务器端的多CPU，多内
核并行计算已经不是什么新鲜的事情，因此突然间多核受到如此的关注，我想是因为，Intel把多核带到了普通用户和企业面前。不过，如今已经是网络时代，
更多的计算任务将交由网络服务器来承担，客户端将更多扮演展现层计算的角色，到底需要多大的计算能力，真的需要4核、8核。。。。。。CPU?相信不会有
哪个用户会不断的升级利用不上的计算能力。客户端会需要多核计算吗? <br>
<br>　　4 微软将彻底被排挤出企业服务器端市场? 
<br>
<br>　　Oracle推出Linux计划，紧接着微软Windows突然和Novell Suse
linux合作，震动了整个IT产业。给人们最直观的感觉就是微软windows和linux之争热闹了。然而在这些事件的背后，却有另外一个信号，微软
很有能因此彻底被挤出服务器端应用市场。为什么这么说?虽然linux和windows
口水战不断，但是从技术角度讲各有长短，linux对于微软Windows
Server并不是致命的威胁。但真正让微软感到害怕的是像oracle这样的厂商，将企业解决方案购建在linux之上。这样企业在选择Oracle产
品的时候自然也就会选择linux系统平台，而微软产品跨平台特性一直不好，因此Oracle，Ibm的这些举动很可能最终将微软赶出服务器端应用市场。
所以，微软会赶忙和Novell合作并大力发展虚拟技术，希望可以阻止Oracle对linux市场控制。微软接下来会做什么?收购Novell，推自己
的linux又或者开放Windows?当然像<a href="http://ad.cn.doubleclick.net/clk;102718178;17063292;e?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=sap&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle1" target="_blank" class="article">SAP</a>与微软目前的合作对微软也是一个机会。 
<br>
<br>　　5 RIA技术会是怎么一番景象? 
<br>
<br>　　RIA
的提出其实已经是几年前的事情了。在C/S--&gt;B/S之风兴起的时候，就已经有人提出，B/S过于单调的用户体验以及与服务器端交互性能的问题，
其实无法满足用户的需求。一种综合C/S丰富用户体验以及免去安装部署维护等问题的富客户端应用，必然是网络时代应用的一个发展趋势。宽带网络的普及加速
了用户对RIA的需求。然而真正阻碍RIA发展的其实是技术本身。一直以来也没有一个具有很好跨平台性能的富客户端技术来满足程序设计的需求。而无论是
ASP.NET也好还是其它PHPweb开发技术一个致命的问题是，无法真正把客户端与服务器交互的问题解决好，最基本的大量本应该由客户端去解决的展示
层问题，也不得不通过服务器端来处理。谁能真正解决这个问题。AJAX这个时候便自然的充当了消防员的角色，解决一时之需。但它能承担起推动RIA发展的
重任吗?已经争论的口水满天飞。一直在页面设计领域占有霸主地方的Adobe，已经暗暗的借助其Flash应用的优势，发展自己的AS脚本语言。阿波罗计
划，开放AS
VM给Firefox，flex等等一系列举措已经显示了自己的决心。然而摆在它面前的问题是，如何说服广大的设计人员再去学习一套AS脚本语言。微软自
然不会放弃这个市场，WPF，XAML,Atlas框架的大变样，Expression产品的独立推出，也展现了自己的雄心壮志。对于微软来讲它的优势是
客户端操作系统平台和浏览器市场的统治地位，但究竟Expression能有多大的吸引力扭转广大设计人员的习惯去学习全新的设计工具和语言，也将面临挑
战。 <a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a><br>]]></description>
</item><item>
<title><![CDATA[关注：开源经济模式推动Web2.0的创新]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32251</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:30:32</pubDate>
<description><![CDATA[<div>
		         				
				2007-06-12 10:31
				作者：
				来源：新浪科技
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>导
读：国外媒体6月10日刊登了分析文章指出，随着开放源代码运动对日常生活的影响日益显著，此种经济模式已成为推动Web
2.0技术创新的重要动力。随着时间的推移，开放源代码运动的影响也不仅仅局限于软件和技术层面，同时也向媒体(视频、图像和博客等)、内容及社区等领域
拓展。另一条模式是提供开放源代码平台，如谷歌、YouTube和Facebook等提供的相应网站/项目平台，即向外部开发者提供类似开放源代码性质的
协作平台。一方面，开放源代码使得单一投资人很难独享开发利益；另一方面，它又能刺激大量人员参与其中并分享成果。 [关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%C8%ED%BC%FE" class="cyewunder" target="_blank">软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%AA%D4%B4" class="cyewunder" target="_blank">开源</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=Web2.0" class="cyewunder" target="_blank">Web2.0</a>
		          		    			</div>	
			　　导读：国外媒体6月10日刊登了分析文章指出，随着开放源代码运动对日常生活的影响日益显著，此种经济模式已成为推动Web 2.0技术创新的重要动力。
<br>
<br>　　开放源代码历程几乎与计算机发展史一样久远，早期产品如Multics、Unix、BSD和Minix，随后又有GPL、GNU和FSF等，
再后来是Linux、Apache及其他产品。随着时间的推移，开放源代码运动的影响也不仅仅局限于软件和技术层面，同时也向媒体(视频、图像和博客
等)、内容及社区等领域拓展。
<br>
<br>　　<b>开放源代码商业模式</b>
<br>
<br>　　过去数年中，一些企业已开始注意到开放源代码产品开发和发布过程中的增值服务，并由此而探索出一些盈利之道，其中一条是开发出产品并向社区开
放，其主要目的有两点：1) 进行一般性市场营销；2)
促使开放源代码社区中的技术人员提高既有产品质量。利用开放源代码技术，科技企业通过向客户销售增值软件或服务以实现盈利，如Eclipse(IBM)、
Netscape、Linux及Solaris等产品便是如此。
<br>
<br>　　虽然这种方式有利于各科技企业降低开发成本，但这些企业也需为此投入其他开支，如确定产品开发方向、授权协议以及对分包软件进行集中测试等，
同时还需协调与社区开发人员甚至是竞争对手之间的关系。另一条模式是提供开放源代码平台，如谷歌、YouTube和Facebook等提供的相应网站/项
目平台，即向外部开发者提供类似开放源代码性质的协作平台。这种商业模式的盈利之道通常为：提供免费基础服务，然后借助网站流量提升来获取广告收入。
<br>
<br>　　<b>开放源代码的商业价值</b>
<br>
<br>　　一些人士认为，在开放源代码经济活动中，从企业、客户和软件开发人员三方看，企业受益最多，原因有二：1)
客户需要获得解决方案，科技企业利用开放源代码软件来提高服务价格；2)
与单一软件开发者相比，科技企业可接触大量开放源代码社区开发人士并扮演雇主角色，从而在商业谈判中占据更多优势。
<br>
<br>　　<b>开放源代码对客户的价值</b>
<br>
<br>　　客户可从开放源代码产品获得以下实惠：1) 免费软件可使实施新计划更为容易；2) 可中途更换软件提供商及服务商；3)
可雇用大量开发人员而不必向专利软件销售商支付授权费用。事实上，如果没有开放源代码产品，大量创业公司的运营成本就会比目前高出很多，而各种互联网及新
技术其他新发明的数量则将随之减少。
<br>
<br>　　<b>开放源代码对软件开发者的价值</b>
<br>
<br>　　开放源代码软件开发人员也可因参与开发而获益：1)
由于开放源代码产品的日益流行，一些企业开始聘用开放源代码软件开发者来支持社区，从而提高了开发者的积极性；2)
参与开放源代码项目开发有利需建立和提高开发者本人的诚信度；3) 绝大多数开放源代码开发者有机会成为项目开发的公众代言人。
<br>
<br>　　结论：开放源代码运动已成为强有力的价格创造者。不仅如此，它还开创了新型财富分配方式。一方面，开放源代码使得单一投资人很难独享开发利益；另一方面，它又能刺激大量人员参与其中并分享成果。正因为如此，开放源代码运动正演变流行的商业模式和社会活动。<a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a>]]></description>
</item><item>
<title><![CDATA[当今常用的开源协议详细解析]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32250</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:27:26</pubDate>
<description><![CDATA[<div>
		         				
				2007-07-09 15:31
				作者：ugmbbc 
				来源：CnBeta
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<iframe src="http://www.enet.com.cn/enetshow.shtml?Pool=techbanner" id="techbanner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>

</div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢?答案是否定的.开源运动同样有自己的游戏规则和道德准则.不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成名誉和市场上的损失,更可能陷入法律纠纷和赔偿. 
						[关键字]  		          	<a href="http://www.enet.com.cn/tech/inforcenter/search.jsp?keyword=%BF%AA%D4%B4&amp;ACondtion=keyword&amp;siteid=security" class="cyewunder" target="_blank">开源</a>
		          		          	<a href="http://www.enet.com.cn/tech/inforcenter/search.jsp?keyword=%D0%AD%D2%E9&amp;ACondtion=keyword&amp;siteid=security" class="cyewunder" target="_blank">协议</a>
		          		    			</div>	
			<div class="contenttxt">　　首先,要对几个概念有所了解: 
<br>
<br>　　1. Contributors 和 Recipients 
<br>
<br>　　Contributors
指的是对某个开源软件或项目提供了代码(包括最初的或者修改过的)发布的人或者实体(团队、公司、组织等),Contributors
按照参与某个软件开源的时间先后,可以分为 an initial Contributor 和 subsequent Contributors .
<br>
<br>　　Recipients指的是开源软件或项目的获取者,显然,subsequent Contributors 也属于 Recipients之列. 
<br>
<br>　　2. Source Code 和 Object Code 
<br>
<br>　　Source Code 指的是各种语言写成的源代码,通过Source Code,结合文档, 可以了解到整个软件的体系结构及具体到某个功能函数的实现方法等. 
<br>
<br>　　Object Code 指的是Source Code 经过编译之后,生成的类似于“类库”一样的,提供各种接口供他人使用的目标码,按我的理解,它就是像常见的DLL、ActiveX、OCX控件性质的东西.(不知道这样理解对不对) 
<br>
<br>　　分清楚这两个概念的目的在于,有些开源,只发布Object Code ,当然,大多数发布的是Source Code.很多协议也对 “你发布的是哪种Code的时候应该怎样”,有着明确的约束. 
<br>
<br>　　3. Derivative Module 和 Separate Module 
<br>
<br>　　Derivative Module 指的是,依托或包含“最初的”或者“从别人处获取的”开源代码而产生的代码,是原“源代码”的增强(不等于增加)、改善和延续的模块,意为“衍生模块”. 
<br>
<br>　　Separate Module 指的是,参考或借助原“源代码”,开发出的独立的,不包含、不依赖于原“源代码模块”,意为“独立的模块”.理解这两个概念的目的在于,很多协议对涉及到商业发布的时候,会有哪些是衍生的,哪些是独立的,有着明确的商业发布规定. 
<br>
<br>　　现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种.我们在常见的开源协议如BSD, GPL, LGPL,MIT等都是OSI批准的协议.如果要开源自己的代码,最好也是选择这些被批准的开源协议. 
<br>
<br>　　　　这里我们来看四种最常用的开源协议及它们的适用范围,供那些准备开源或者使用开源产品的开发人员/厂家参考. 
<br>
<br>　　BSD开源协议(Berkeley Software Distribution ) 
<br>
<br>　　BSD开源协议是一个给予使用者很大自由的协议.基本上使用者可以“为所欲为”可以自由的使用,修改源代码,也可以将修改后的代码作为开源或
者专有软件再发布.但“为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: <br>
<br>　　1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议. 
<br>
<br>　　2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议. 
<br>
<br>　　3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广. 
<br>
<br>　　其实这几个规则约定的目的也只是达到一个目的:是他人的东西,别人以BSD开源了,你就不能不做任何声明而占为己有,更不能用他人的名义来做商业推广.你只对你自己的东西拥有绝对控制权. 
<br>
<br>　　举个例子,你用开源代码(A)修改或做其他增添之后,产生了产品B,这时候,你对B的控制由你自己决定,你可以用任何协议再开源,也可以闭源
商业发布.但,因为如果B中包含了A或A的一部分(一点都不包含就不叫修改了),那你在B产品的版权声明中,必须有提到你有使用到 A ,并且附带上
A 的开源协议.而且不能做商业推广的时候将B 冠以原开源作者的名义以促进商业推广. <br>
<br>　　BSD代码鼓励代码共享,但需要尊重代码作者的著作权.BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上 
<br>
<br>　　开发商业软件发布和销售,因此是对商业集成很友好的协议.而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发. 
<br>
<br>　　Apache Licence 2.0 
<br>
<br>　　Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件).需要满足的条件也和BSD类似: 
<br>
<br>　　1. 需要给代码的用户一份Apache Licence 
<br>
<br>　　2. 如果你修改了代码,需要再被修改的文件中说明. 
<br>
<br>　　3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明. 
<br>
<br>　　4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence.你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改. 
<br>
<br>　　Apache Licence也是对商业应用友好的许可.使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售. </div><a>　　　GPL (Gun General Public License)vesion 2.0 1991 
<br>
<br>　　我们很熟悉的Linux就是采用了GPL.GPL协议和BSD, Apache
Licence等鼓励代码重用的许可很不一样.GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代
码做为闭源的商业软件发布和销售.这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商
业软件公司开发的免费软件了. <br>
<br>　　GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须也采用
GPL协议,既必须也是开源和免费.这就是所谓的“传染性”.GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势. <br>
<br>　　由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础. 
<br>
<br>　　最常见的开源协议,使用它作为授权协议的有大名鼎鼎的 Linux .GPL最显著的两个特点就是网上称为的“病毒性传播”和“不允许闭源的商业发布”. 
<br>
<br>　　所谓的“病毒性传播”,指的是,GPL规定,所有从GPL协议授权的源码衍生出来的(即上面提到的Derivative
Module),或者要跟GPL授权的源码混着用的Project,都要遵循GPL协议,就像病毒一样,粘上了关系,就“中毒”了.GPL这样规定的目的
是,保证在GPL协议保护下的产品,不会再受到其他协议或者授权的约束.即让跟GPL有关系的源码都能免费获取.举个例子,如果你的改进的Linux中使
用了GPL授权下的开源模块(也必须使用,你不可能自己重新去做个内核吧,如果做出来了,你也没必要叫Linux了.),那么你整个Linux产品也必须
遵循GPL协议去开源,不能以其他方式去开源发布,更不允许闭源发布.这样一来,就不会出现这样一个Linux--这个功能是GPL协议授权的,可以免费
获取源码,而另外一个功能是其他协议下的,拿不到源码.这点规定对使用或者研究该产品的人来说,是一个极大的便利. <br>
<br>　　而“不允许闭源商业发布”指的是,在GPL授权下,你的软件产品可以商业发布,拿去卖钱,但是在这同时,你也必须将该产品的源码以GPL协议
方式开源发布出去,供他人免费获取.也许有人会迷惑,拿去卖,又同时开源,那谁来买阿?这个产品怎么赚钱呢??这就涉及到开源产品的商业模式的问题了,想
了解相关一些信息的话,可以看看以上我给出链接的一些文章.至于后面,可能会写一篇关于开源项目的商业模式的随笔. <br>
<br>　　GPL协议下的商业发布的一个关键点就像 Java 视线论坛的
Robbin所说的,GPL是针对软件源代码的版权,而不是针对软件编译后二进制版本的版权.你有权免费获得软件的源代码,但是你没有权力免费获得软件的
二进制发行版本.GP对软件发行版本唯一的限制就是:你的发行版本必须把完整的源代码一同提供. <br>
<br>　　它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似. 
<br>
<br>　　LGPL 
<br>
<br>　　LGPL是GPL的一个为主要为类库使用设计的开源协议.和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同.
LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码.这使得采用LGPL协议的开源代码可以被商业软件作为类
库引用并发布和销售. <br>
<br>　　但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议.因此LGPL协议
的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用. <br>
<br>　　GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品. 
<br>
<br>　　CPL(Common Public Liecense) vesion 1.0 
<br>
<br>　　CPL是IBM 提出的并通过了OSI(Open Source Initiative)批准的开源协议.主要用于一些IBM或跟IBM相关的开源软件/项目中.如很著名的Java开发环境 Eclipse 、RIA开发平台Open Laszlo等. 
<br>
<br>　　CPL也是一项对商业应用友好的协议.它允许 Recipients 对源码进行任意的使用、复制、分发、传播、展示、修改以及改后做闭源的二次商业发布,这点跟 BSD 很类似,也属于自由度比较高的开源协议.但是,需要遵循: 
<br>
<br>　　1. 当一个Contributors将源码的整体或部分再次开源发布的时候,必须继续遵循 CPL开源协议来发布,而不能改用其他协议发布.除非你得到了原“源码”Owner 的授权. 
<br>
<br>　　2. CPL协议下,你可以将源码不做任何修改来商业发布.但如果你要将修改后的源码其开源,而且当你再发布的是Object Code的时候,你必须声明它的Source Code 是可以获取的,而且要告知获取方法. 
<br>
<br>　　3. 当你需要将CPL下的源码作为一部分跟其他私有的源码混和着成为一个 Project 发布的时候,你可以将整个Project/Product 以私人的协议发布,但要声明哪一部分代码是CPL下的,而且声明那部分代码继续遵循CPL. 
<br>
<br>　　4. 独立的模块(Separate Module),不需要开源.</a><a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a><br>]]></description>
</item><item>
<title><![CDATA[全球开源软件发展状况及趋势分析]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32246</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:17:08</pubDate>
<description><![CDATA[<div>
		         				
				2007-11-05 10:52
				作者：许洪波 徐浩 许伯桐
				来源：赛迪网－软件世界
			 </div>
			 <div class="pad10" style="border-bottom: 1px dashed rgb(204, 204, 204);">
<table align="center" border="0">
<tbody><tr>
<td align="center">
<iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>
<br></td>
</tr>
</tbody></table></div>



       
			<!--正文-->
			<div class="ciodigest">
							<b>[摘要] </b>开
源改变了未来软件的开发模式，使得聚集大家的力量打破组织边界、持续创造出更高质量、更安全、更易用的软件成为可能，更重要的是改变了软件的使用方式——
从“使用许可”为主的商业模式变成以支持、咨询等面向服务为主的商业模式，在全球向服务经济转型的过程中扮演着日益重要的角色。 [关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%AA%D4%B4" class="cyewunder" target="_blank">开源</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%AA%D4%B4%C8%ED%BC%FE" class="cyewunder" target="_blank">开源软件</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=Linux" class="cyewunder" target="_blank">Linux</a>
		          		    			</div>	
			<div class="contenttxt">　
　编者按:本文基于欧盟首个对开源软件产业的研究报告——《开源对欧盟软件通信产业竞争力和创新的影响》，在获得欧盟FLOSS项目组负责人Rishab
Aiyer
Ghosh先生及欧盟相关负责人的同意后，欧盟QualiPSo开源软件竞争力中心对报告进行了节选、编译和增补。通过该报告，我们可以了解欧盟对开源软
件产业的研究成果，这对于规划和实施我国开源软件战略具有重大的借鉴作用。为此，我们还将分期连载部分重要内容，包括开源软件对欧盟国家直接的经济影响和
间接影响，以及对趋势、方案和公关方针策略的分析。 <br>
<br>　　开源改变了未来软件的开发模式，使得聚集大家的力量打破组织边界、持续创造出更高质量、更安全、更易用的软件成为可能，更重要的是改变了软件
的使用方式——从“使用许可”为主的商业模式变成以支持、咨询等面向服务为主的商业模式，在全球向服务经济转型的过程中扮演着日益重要的角色。 <br>
<br>　　开源软件的市场份额与地理分布 
<br>
<br>　　目前（截至2006年底）全球接触和应用开源软件的企业占到了总数的50%以上，美国则高达80%～90%。尤其是在过去的2年（2004-
2006）中，越来越多欧洲企业都开始使用开源软件，2005年底已经超过40%，主要分布在电信行业、媒体行业和公共管理部门。目前（截至2006年
底）欧盟企业大约投入了12亿欧元进行开源软件的开发，为市场提供了56.5万个就业机会和2630亿欧元的相关收入。 <br>
<br>　　未来三年（2007～2010），将有95％的全球2000强企业广泛采用开源产品和服务，开源软件将在未来五年（2007～2012）内占
据传统软件市场22%的份额。到2010年，欧盟开源相关的服务将占到其IT服务产业产值的34％，开源软件带来的产值将占欧盟GDP的4％，超过欧盟整
个软件行业产值的25%。 <br>
<br>　　开源软件的应用领域有Web服务器、服务器操作系统、桌面操作系统、Web浏览器、数据库、电子邮件及其他信息通信领域的基础系统。以下是主要开源软件的市场份额及分布情况。 
<br>
<br>　　操作系统方面，根据IDC的报告，Linux的市场整体营收与PC服务器和套装软件硬件预计在2008年将达到35.7亿元,年均增长
26%。Linux服务器在全世界占有率预期从2004年的20%增长至2008年的27%，在美洲的份额将从24%增长到32%，在欧洲将从2004年
的16%增长到2008年的25%。然而，在Linux桌面系统的使用占有率方面，欧洲高于美洲:2004年，欧洲5%,美洲2%，预计到2008年，欧
洲将达9%，美洲为4%。 <br>
<br>　　中间件方面，2006年Apache在欧洲的市场占有率为84%在美国的市场占有率为66%。根据BZResearch的调查，2004年，
JBoss是应用服务器中间件市场的领导者。2005年，JBoss应用服务器的市场份额为37%，而作为2005年应用服务器市场的领导者，IBM
websphere则仅拥有37.2%的份额。 <br>
<br>　　数据库方面，据IDC的数据，2002年，西欧33%的公司使用开源数据库软件，而个人方面只有11%的用户使用开源数据库软件，而到了
2005年，这两个数据分别为25%和33%。可以看出开源软件在这一领域的应用有很明显的增长。另外,据Gartner的统计分析，比起整个数据库市场
8%的增幅，开源数据库软件的使用率在2005年增长了47%以上。 <br>
<br>　　桌面办公方面，据Openoffice.org的报告显示，到2006年中为止，OpenOffice2.0在主要的下载点共被下载
62,500,000次。据Forrester
Research统计，2004年，OpenOffice在北美大公司的市场占有率为8.5%，在欧洲,仅德国企业中的市场占有率就达到了8%。 <br>
<br>　　开源软件的发展动力 
<br>
<br>　　开源软件市场的快速增长源自于开源软件内在的创新机制与发展动力。如今，开源软件正在快速地从纯开发者社区或者大学驱动的模式转向由工业驱动
的模式。开源软件不但孵化了中小企业的成长环境—对产品的开发、维护和集成活动的支持，并且重塑了软件商业模式，显著影响了大企业的战略决策。开源软件重
塑了大型企业的业务模型并影响这些企业的决策—业界的领导者如IBM、Oracle、Philips、<a href="http://ad.cn.doubleclick.net/clk;102718178;17063292;e?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=sap&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle1" target="_blank" class="article">SAP</a>、Nokia等都在大力实施开源战略。 
<br>
<br>　　从本质上说，开源软件的开发模式和许可机制更加适合于面向服务的商业模型，其利润核心并不是纯软件开发或者是任何形式的软件产品，而是软件服
务。因此，开源模式成功吸引了业务模型已经是面向服务的企业（如IBM），或是那些占据特定市场（需要大量客户化和定制支持）的软件企业（如甲骨文和
SAP），或者那些主要的硬件企业（飞利浦和诺基亚）。 <br>
<br>　　当然，开源软件也给许多小企业带来了新的商业模式，即双重许可（GPL＋私有许可）的纯软件销售。其中最有名的是一个来自瑞典的中小企业MySQL，建立了数据库软件领域的开源品牌。 
<br>
<br>　　开源软件在企业的使用状况 
<br>
<br>　　欧洲 
<br>
<br>　　从应用类型来讲，操作系统、中间件、数据库、协同应用、开发工具、<a href="http://ad.cn.doubleclick.net/clk;102718245;17080049;y?http://www.bestsapchina.com/?utm_source=eNet&amp;utm_medium=textarticle&amp;utm_term=ERP&amp;utm_content=erp_crm&amp;utm_campaign=OLG&amp;srcid=eNet_textarticle9" target="_blank" class="article">ERP</a>、CRM以及个性化产品是开源软件应用的主要类型。据Forrester Research的统计，2005年，欧洲已经使用开源软件的企业达到了40%，即将使用的企业还有8%。 
<br>
<br>　　在使用开源软件的企业中，已经有45％的企业将开源软件作为其核心关键业务系统的部署和运营环境，开源数据库、Web服务器和Linux服务
器是企业使用最为广泛的开源软件，有三分之二都在用Apache、Tomcat或者Linux，开源个性化产品的近年来发展迅速，超越了开发工具等传统的
开源应用，如图1所示。这些企业认为开源软件所带来的利益，要归功于其成本:平均72%声称较低的“拥有成本”和较低的“获得成本”是对商业软件最关键的
优势。 <br>
<br>　　从应用行业来讲，开源软件已经成功应用于商业、金融、医疗、电子政务、制造、零售、通讯、交通等关乎国计民生的各重要行业，并日益增长。其中
商业、金融以及通讯传媒是应用最为广泛的领域，在被调查的企业中，使用率均超过了75％;在信息化比较薄弱的医疗领域虽然使用率相对较低，也几乎达到了6
成，如图2所示。<br>美国 
<br>
<br>　　开源软件在美国企业应用中日益成为一个重要的角色。据Optaros
Inc的调查报告，美国的企业正在积极从使用传统商业软件转向开源软件，在调查的512家企业中，87%已经开始使用开源软件，中大型企业更加倾向于选择
开软件:被调查的企业中，年收入超过5千万美元的企业有156家，全部都在使用开源软件。而且，使用的类别并不局限于操作系统（如Linux），越来越多
的关键业务应用软件也在转向开源。 <br>
<br>　　从开源软件应用类型上看，数据库、应用服务器、门户和内容管理、开发工具以及数据中心运营管理软件是美国政府和企业应用最为广泛的开源软件。
其中，开源数据库的使用总体上居于领先地位。从开源软件应用的领域来看，通讯行业是美国开源软件应用多的行业，其次为计算机软硬件行业，传统工业和金融保
险行业相对应用较少，如图3所示。 <br>
<br>　　开源软件在公共管理部门的使用 
<br>
<br>　　随着政府等公共管理部门对开源软件的日益了解，政府对开源软件的政策计划扮演了重要的角色。根据CSIS发布的数据，2005年全世界大约有
265个关于开源软件的国家政策计划，而且绝大多数属于优先计划。欧洲发布了126个开源软件政策计划，亚洲73个，拉丁美洲40个，北美17个，中东和
非洲4个。目前，绝大多数的政府开源项目都是由欧盟开展的（16个），法国和德国也积极实施了开源软件项目（分别为10个和9个），意大利、西班牙和英国
紧随其后，均为6个。 <br>
<br>　　欧洲 
<br>
<br>　　FLOSS项目对欧盟13个国家的955个公共管理组织进行了调查分析，将被调查对象对开源软件的了解使用程度分为“了解”、“不了解”和
“没有用过”三个层次，其中，“不了解”的用户是指在受访中声称没有用开源软件，但却在使用Linux，Apache或者MySQL，如表1所示。可以看
出，IT专业人员较多、IT技术应用规模比较大的公共管理部门对于开源软件的了解和使用比率非常高，而且，事实上使用（了解和不了解使用的总和）开源软件
的公共组织已经超过了80％，并仍在继续增长。 <br>
<br>　　其他国家和地区 
<br>
<br>　　其他国家对于开源软件也给予了不同程度的支持。巴西提出一项目标—政务领域80％的软件都要采用开源软件;2004年，Linux获得了中国政府操作系统软件采购份额的39％。 
<br>
<br>　　根据FLOSSWorld项目前期的跟踪调查，政府对开源软件的使用有着较高的比率，尤其是在拉丁美洲和亚洲。在拉丁美洲，
OpenOffice类办公软件以及MySQL、PostgreSQL类数据库软件受到了较为广泛的应用。并且，在对这些国家和地区的调查中，超过60%
的被调查者计划增加开源软件的使用，如图4所示。 <br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1105/75/2314881.jpg" border="1">
<br>图1: 开源软件在欧洲的应用类型 </center>
<br>
<br>　　数据来源: IDC 2005欧洲软件和用户调查 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1105/72/2315007.jpg" border="1">
<br>图2 开源软件在欧洲各行业的使用 </center>
<br>
<br>　　数据来源:IDC 2005欧洲软件和用户调查 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1105/94/2315147.jpg" border="1">
<br>图3:开源软件在美国不同行业和软件领域的使用情况 </center>
<br>
<br>　　数据来源:2005 OptarosIns 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1105/71/2315289.jpg" border="1">
<br>图4:部分国家机关使用开源软件的情况 </center>
<br>
<br>　　数据来源:FLOSSWorld Project 
<br>
<br>　　欧盟QualiPSo项目 
<br>
<br>　　QualiPSo是由来自3大洲、10个国家共22个合作单位共同承担的欧盟第六框架计划重大项目，总投资1700万欧元，是欧盟历史上政府资助的最大开源软件项目。 
<br>
<br>　　QualiPSo旨在通过制定开源领域的国际质量标准，提供可信的、高质量、低成本和高适应性的开源软件技术、流程和产品，构造覆盖全球的开
源竞争力中心集群，从而有效共享世界范围的智力资源和技术成果，密切个人、组织和区域之间的联动、协作与分享，推动开源软件在全球主流工业的应用，促进全
球信息产业的创新和发展。 <br>
<br>　　中国QualiPSo开源软件竞争力中心建设地点在华南理工大学，许洪波任首席代表兼首席科学家。 <a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a><br> </div><iframe id="banner" noresize="noresize" marginheight="0" marginwidth="0" frameborder="0" height="60" scrolling="no" width="468"></iframe>]]></description>
</item><item>
<title><![CDATA[评析：开源软件的社会经济影响]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=lylhelin&amp;id=32245</link>
<author>lylhelin</author>
<pubDate>2008/3/7 16:14:22</pubDate>
<description><![CDATA[<a>　
		         				
				2007-11-15 13:42
				作者：徐浩 许洪波 许伯桐　
				来源：赛迪网－软件世界<br>






       
			<!--正文-->
			</a><div class="ciodigest">
							<b>[摘要] </b>本
文基于欧盟首个对开源软件产业的研究报告——《开源对欧盟软件通信产业竞争力和创新的影响》。通过该报告，我们可以了解欧盟对开源软件产业的研究成果，这
对于规划和实施我国开源软件战略具有重大的借鉴作用。本文主要包括开源软件对社会的总体经济影响、开源软件对软件生产力的影响、开源软件对行业企业的渗透
三个部分。 [关键字]  		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%AA%D4%B4" class="cyewunder" target="_blank">开源</a>
		          		          	<a href="http://www.enet.com.cn/esoftware/list/index.jsp?_keyword_=%BF%AA%D4%B4%C8%ED%BC%FE" class="cyewunder" target="_blank">开源软件</a>
		          		    			</div>	
			<div class="contenttxt">　　<center><img src="http://images.enet.com.cn/2007/1115/64/1057890.jpg" border="1">
<br>表1:开源软件的生产/替换成本</center>
<br>
<br>　　
根据我们的统计分析，欧盟企业每年总共投入约12亿欧元用于开源软件开发，增加约2630亿欧元的年度收入和大量的就业人数。大量证据表明开源软件对技能
发展、鼓励中小企业的成长和就业有着巨大的促进作用，如果认为开源软件开发者在今天的经济生活中只起到了微不足道的作用，那将是一个错误。据保守估计,目
前在企业中从事开源软件项目开发的人员至少有57万人。 <br>
<br>　　像其他信息通信技术一样，开源软件也驱动着与开发相关的特定技能需求。然而开源软件不仅需要正式的基础技能，也需要与开源社区行为相关的技能，如项目管理、著作权法和社区创始能力。 
<br>
<br>　　开源软件也会驱动一系列技能水平和专业化需求发展，如正式教育、信息教育以及除信息通讯技术之外的各种专业培训等。开源软件通过开源社区提供的良好培训和终身学习环境能够帮助开发人员增强就业能力。 
<br>
<br>　　而且，开源软件也可以帮助雇主快速地找到合适的人才,与正规和传统的方式提供大学毕业生或普适性人才相比，开源社区为雇主提供了更多针对性的高技能人才。同时，开源软件为雇主节省了大量的培训费用，因为开源社区提供了非正式的实习训练和培训。 
<br>
<br>　　开源软件对于目前产业和技术的间接影响仍然巨大，例如虽然基于Internet的电子商务增长并不是与开源软件直接相关的，但是如果没有开源软件的基础架构，这样的增长却是不可能实现的。 
<br>
<br>　　因此，这也可以被认为是开源软件对信息通讯产业的部分影响。开源软件对于医疗、公共管理、教育等非IT产业也具有相当大的潜在影响力，因为这些应用领域的增长对于软件和信息通讯服务的整体需求具有巨大的反馈作用。 
<br>
<br>　　开源对软件生产力的影响 
<br>
<br>　　软件生产力的评估本质上是经济学和软件工程的交叉，对开源软件而言包括两个方面: 
<br>
<br>　　◆实际开发成本，即从时间和工作的角度或者等值货币的角度衡量开发某个开源软件产品的实际开发成本。 
<br>
<br>　　◆软件的替代成本，即该开源软件产品如果由一个企业利用私有的软件开发模型进行开发所需要的成本。 
<br>
<br>　　替代成本的估算是业界广泛使用的成本计算模型，在这个模型中将使用衡量软件成本的各种因素，例如软件代码数量、软件的复杂性、时间紧迫性等等。 
<br>
<br>　　西班牙UJRC（Rey Juan Carlos大学）曾经为开源软件Debian粗略的估算了替代成本。Debian是一个典型的大型开源软件集合包，包括GUI/Linux操作系统及大量稳定的开源软件应用和工具，超过200万行源代码。 
<br>
<br>　　表格1是基于更加复杂的COCOMO软件成本估算模型对Debian所做的替代成本分析。 
<br>
<br>　　从表格1可以看出，对于Debian这样一个源代码超过2亿行的开源软件，如果由一个独立软件企业开发，至少需要16万人年的工作量，到2005年将耗资119亿欧元，到2010年将耗费1000亿欧元（大型项目中至少50％的编码在5年之后将会改变）。 
<br>
<br>　　因此，开源软件开发者具有更大的生产力。开源软件开发者独立的工作，以较低的沟通成本最大化了他们对整体的贡献。在评估私有软件成本的
COCOMO模型中，开发成本很大部分取决于用于沟通和协调的成本，编码库越大，团队的规模也越大，越复杂。如果这些因素随着开源模式的发展而得以避免
话，无疑软件开发将具有更大的生产力。 <br>
<br>　　从Debian的参与组织，我们可以大致估算出目前按地区分类的开源软件代码贡献比例，其中欧盟是开源软件源代码的最大贡献者，约为45%，其次为美国和加拿大，约41%，中国、印度、日本、韩国总共仅有2%，如图1所示。 
<br>
<br>　　开源对行业企业的渗透 
<br>
<br>　　对参与开源软件开发的企业，我们仍以Debian为例作为统计和分析的基础。我们对参与Debian开发的总计986个企业进行了调查，从地区分布上来看，至少有25%的企业来自欧洲。 
<br>
<br>　　在计算机装备行业和制造业，参与开源共献的大企业所占数量较多，均为64%;在软件咨询和供应行业、IT和商业服务行业、其他制造业等领域，中小企业（在欧盟，人数少于250人的企业称为中小企业）分别占据76%，67%和53%。 
<br>
<br>　　因此，通常来讲，按照贡献者的数量和不同的行业领域分类来衡量，尽管在制造业、计算机装备业，大企业是开源的主要参与者，但是其他绝大多数领域中，中小企业在各自的行业中基本上是开源的主要参与者，并且总体上仍以61%的数量占据多数地位，如图2所示。<br>从不同行业企业对开源的的贡献来看，软件咨询和供应企业（包括软件产品和服务提供商）以及IT商业服务企业（包括商业咨询、自然科学、工程研究和数据处理
等）对开源软件的代码贡献量最大，均为31%，我们也可以认为有两类行业组成的整个服务业贡献量占据了62%的比例。其他制造企业（包括电子制造、通信设
备制造企业）与计算机设备制造企业贡献量都为9%，其他行业企业，如零售、批发等与IT无关的企业，贡献量为20%。 <br>
<br>　　事实上，在2002年FLOSS用户调查中，27%的低IT相关企业，如零售、旅游等，都部份支持或者完全支持它们的员工从事开源软件项目。从更广的范围来讲，这类企业以及其他制造企业实质上是IT企业的用户，软件在这些企业中是成本中心，而不是利润的来源。 
<br>
<br>　　因此，通过参与开源软件开发或者使用开源软件，这些企业能够与其他行业企业共同分担软件成本，降低风险。对于那些在商业策略上与IT相关的企业，对服务的重视（而非软件产品销售）是驱动他们参与开源软件的重要原因，并因此而成为了重要的软件和服务提供商。 
<br>
<br>　　为了进一步说明开源软件贡献企业在所属行业中的位置，我们总共抽取了158家开源软件贡献企业及其所在行业总共171523家企业，对它们的平均年收入做对比分析。 
<br>
<br>　　从总体上来看，几乎所有行业内，参与开源软件贡献的企业平均年收入都远高于该行业的平均水平。从企业的规模来看，参与开源软件贡献的中小企业
的平均年收入与行业中小企业平均水平大致相当，而行业中参与开源软件贡献的大型企业的平均年收入远高于行业大型企业的平均水平，说明各行业大型企业中的龙
头企业参与较多，并在一定程度上决定了开源在产业中的位置，如表2所示。 <br>
<br>　　开源对人才的影响 
<br>
<br>　　通过对开源软件开发者和使用者的全面研究发现:对于开发者参与开源社区的最重要原因是免费学习新的技能。这些技能对于开发者来说是很重要的，
因为可以帮助他们得到工作并且创造和维持小的商业活动。这里所说的技能并不是如何使用开源软件，而是参与开源软件社区所学习到的东西。 <br>
<br>　　这些技能包括编程，还有很少在计算机科学课程教学可以得到的技能，比如版权和许可证（这个是许多开源软件项目的主要话题）。其次还包括团队合作、团队管理和协调能力。 
<br>
<br>　　一些开源软件的调查表明:78%参与开源软件社区的开发者是为了学习和发展新的技能;67%的开发者是为了分享他们的知识和能力。 
<br>
<br>　　这些学习到的能力对开发者而言有着经济价值:30%开源软件社区的开发者是为了增加工作的机会;30%是为了参与社区带来的直接收入，还有18%为了间接的收入，比如由于具有在开源软件社区的工作经验，得到了一份新的与开源软件无关的工作。 
<br>
<br>　　开源软件社区就像是一个非正式的学徒关系，学生和老师免费地贡献出自己的时间，在培训过程中也不存在任何的商业行为，每个人都在培训过程中公平的受益。然而，不是每个人都是平等地投资。比如很多老师是受过大学教育或者工作培训的，他们为社区的培训承担了部分成本。 
<br>
<br>　　在更高的层面上看，这个培训系统只有少数人是显式的付出，却使所有人从中受益，这可以说是从付钱接受正是教育的人向其他人提供的某种津贴或技术转让。在国家中，这个就体现出大公司把技术转让给小公司，大公司常常可以为培训付款，小公司可能在培训中难以开支。 
<br>
<br>　　同时，这里也存在领域受益。一些国家可能在计算机科学学位课程中有正式的计算机培训，但是其他的专业可能就没有，比如生物学。因此，使用开源软件可以让学生非正式地学习计算机技能、编程技能等，同时也提高了他们在正式工作中的能力。 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1115/96/1058820.jpg" border="1">
<br>图1 开源软件的地区贡献比例</center>
<br>
<br>　　 数据来源:西班牙Rey Juan Carlos大学 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1115/26/1059207.jpg" border="1">
<br>图2 参与开源软件贡献的企业</center>
<br>
<br>　　数据来源:西班牙Rey Juan Carlos大学、Amadeus Database 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1115/56/1059375.jpg" border="1">
<br>图3 贡献开源代码的企业（按行业和大小分类）</center>
<br>
<br>　　数据来源：西班牙Rey Juan Carlos大学，Amadeus数据库 
<br>
<br>　　<center><img src="http://images.enet.com.cn/2007/1115/07/1059559.jpg" border="1">
<br>表2 2004开源软件贡献企业平均收入与行业平均收入对比</center>
<br>
<br>　　单位:百万欧元 数据来源MERIT <a href="http://www.enet.com.cn/"><img src="http://images.enet.com.cn/end.gif" target="_blank" align="absmiddle" border="0" height="11" width="11"></a><br><br></div><a><br></a>]]></description>
</item>
</channel>
</rss>