﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-常飞</title><link>http://www.blogjava.net/CFJAVA/</link><description>javablog</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 20:53:38 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 20:53:38 GMT</pubDate><ttl>60</ttl><item><title>权限管理系统</title><link>http://www.blogjava.net/CFJAVA/archive/2011/11/28/364950.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Sun, 27 Nov 2011 22:30:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/11/28/364950.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/364950.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/11/28/364950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/364950.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/364950.html</trackback:ping><description><![CDATA[几篇不错的权限管理系统讲述<br /><br />1.讲的很详细<br /><a href="http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599691.html">http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599691.html</a><br /><br />
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">实现业务系统中的用户权限管理</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">--</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">设计篇</span></strong></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">B/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">系统中的权限比</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">C/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">中的更显的重要，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">C/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">系统因为具有特殊的客户端，所以访问用户的权限检测可以通过客户端实现或通过客户端</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">+</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">服务器检测实现，而</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">B/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">中，浏览器是每一台计算机都已具备的，如果不建立一个完整的权限检测，那么一个</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">非法用户</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">很可能就能通过浏览器轻易访问到</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">B/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">系统中的所有功能。因此</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">B/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">业务系统都需要有一个或多个权限系统来实现访问权限检测，让经过授权的用户可以正常合法的使用已授权功能，而对那些未经授权的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">非法用户</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">将会将他们彻底的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">拒之门外</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">。下面就让我们一起了解一下如何设计可以满足大部分</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">B/S</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">系统中对用户功能权限控制的权限系统。</span></div>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">需求陈述不同职责的人员，对于系统操作的权限应该是不同的。</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">优秀的业务系统，这是最基本的功能。</span></div>
<ul type="disc"><li mce_="">&nbsp; </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">可以对</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">进行权限分配</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">。对于一个大企业的业务系统来说，如果要求管理员为其下员工逐一分配系统操作权限的话，是件耗时且不够方便的事情。所以，系统中就提出了对</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">进行操作的概念，将权限一致的人员编入同一组，然后对该组进行权限分配。</span> </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限管理系统应该是可扩展的</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用，而不是每开发一套管理系统，就要针对权限管理部分进行重新开发。</span> </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">满足业务系统中的功能权限。</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">传统业务系统中，存在着两种权限管理，其一是功能权限的管理，而另外一种则是资源权限的管理，在不同系统之间，功能权限是可以重用的，而资源权限则不能。</span> </li></ul>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">关于设计</span></strong></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">借助</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">NoahWeb</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的动作编程理念，在设计阶段，系统设计人员无须考虑程序结构的设计，而是从程序流程以及数据库结构开始入手。为了实现需求，数据库的设计可谓及其重要，无论是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">操作的概念，还是整套权限管理系统的重用性，都在于数据库的设计。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">我们先来分析一下数据库结构：</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">首先，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表（</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">以下简称为</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">），</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">gorupmanager</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表（</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">以下简称为</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组表</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">），以及</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">master</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表（</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">以下简称为</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员表</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">），是三张实体表，它们依次记录着</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的信息，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的信息和</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的信息。如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/71422ba5d3dd4c42a119910be903dad7.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/71422ba5d3dd4c42a119910be903dad7.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">这三个表之间的关系是多对多的，一个权限可能同时属于多个管理组，一个管理组中也可能同时包含多个权限。同样的道理，一个人员可能同时属于多个管理组，而一个管理组中也可能同时包含多个人员。如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/bd3cbb4fe37246cfa5ce4d04ed500fd0.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/bd3cbb4fe37246cfa5ce4d04ed500fd0.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">由于这三张表之间存在着多对多的关系，那么它们之间的交互，最好使用另外两张表来完成。而这两张表起着映射的作用，分别是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;actiongroup&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">（以下简称</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">）</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">和</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;mastergroup&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">（以下简称</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">）</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">，前者映射了权限表与管理组表之间的交互。后者映射了人员表与管理组表之间的交互。如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/6ef8b04fcd8c43df8f6bc874887aeca8.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/6ef8b04fcd8c43df8f6bc874887aeca8.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">另外，还需要一张表来控制系统运行时左侧菜单中的权限分栏，也就是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限分栏表</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">，如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/5ac559311e35448b93e48dbb764d5a55.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/5ac559311e35448b93e48dbb764d5a55.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">根据上面的分析，我们进行数据库结构设计，如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">　　</span><span style="font-size: 9pt" mce_style="font-size: 9pt;"><a href="http://www.noahweb.net/mail/2/Project.htm#biao" target="_blank" mce_href="http://www.noahweb.net/mail/2/Project.htm#biao"><span style="color: #000033" mce_style="color: #000033;">点击这里查看权限管理系统数据表字段设计</span></a></span></div>
<div><span style="color: #000033; font-size: 9pt" mce_style="font-size: 9pt; color: #000033;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/3368b6c378264390a93d2654683d50b1.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/3368b6c378264390a93d2654683d50b1.gif" /></span></div>
<div>&nbsp;</div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">为了能够进行良好的分析，我们将数据库结构图拆分开来，三张实体表的作用已经很清晰，现在我们来看一下两张映射表的作用。</span></div>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">一</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">如下图：</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">首先，我们来了解一下</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">与</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">以及</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">之间的字段关联。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/7cbf6152f30741d6bdc07a95faf5b220.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/7cbf6152f30741d6bdc07a95faf5b220.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">看图中的红圈，先看</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">gorupid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段相关联，这种关联方式在实际数据库中的表现如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/c786906487854010976c797459e7c663.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/c786906487854010976c797459e7c663.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">如图中所示，</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">超级管理员</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">为</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">1</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">，那么</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">为</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">1</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的权限也就是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">超级管理员</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">所拥有的权限。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">使用</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段关联，是为了查到一个管理组能够执行的权限有哪些。但这些权限的详细信息却是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段关联所查询到的。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段相关联在数据库中的表现如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/8a9cd7129fb84929abe19a3fc9e796a1.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/8a9cd7129fb84929abe19a3fc9e796a1.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">通过这种关联，才查询到</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">之中那些权限的详细信息。综合起来，我们就知道了一个管理组可以执行的权限有哪些，以及这些权限的详细信息是什么。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">或许你会问，为什么不使用</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">actionid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段相关联呢？因为：</span></div>
<ul type="disc"><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">id</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段在经过多次的数据库操作之后可能会发生更改。</span> </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中仅仅记录着一个管理组可以执行的权限。</span> </li><li mce_=""><span style="font-size: 9pt" mce_style="font-size: 9pt;">一旦</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">id</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">更改，那么</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中的记录也就更改了。</span> </li><li mce_=""><span style="font-size: 9pt" mce_style="font-size: 9pt;">一个管理组可以执行的权限势必将出错，这是非常不希望的。</span> </li></ul>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">考虑到上面的情况，所以应该使用</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段相关联，因为：</span></div>
<ul type="disc"><li mce_=""><span style="font-size: 9pt" mce_style="font-size: 9pt;">在</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">id</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">可能发生变化，而</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段却是在任何情况下也不可能发生变化的。</span> </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中记录的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段也就不会变。</span> </li><li mce_=""><span style="font-size: 9pt" mce_style="font-size: 9pt;">一个管理组可以执行的权限就不会出错了。</span> </li></ul>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">二</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">如下图：</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">我们来了解一下</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">与</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">以及</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">之间的字段关联，如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/68f9ad0f062248f3b2455da2cdfa440c.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/68f9ad0f062248f3b2455da2cdfa440c.gif" /></span></div>
<div>&nbsp;</div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">看图中的红圈部分，先看</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段关联，这种关联方式在数据库中的表现如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/c456d84094d64000bc35baadb6f0ab92.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/c456d84094d64000bc35baadb6f0ab92.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">如图，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">超级管理员</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">为</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">1</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">，我们再看</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">admin</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">属于超级管理员组，而</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">administrator</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">属于超级管理员组，同时也属于管理员组。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">使用这种关联方式，是为了查到一个管理组中的人员有谁。和上面一样，人员的详细信息是靠</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">id</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段（</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">masterid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段）关联查询到的。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">id</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段（</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中是</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">masterid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段）关联表现在数据库中的形式如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/82718b9ac72a47f2b324ad5e223745f2.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/82718b9ac72a47f2b324ad5e223745f2.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">一个人员可能同时属于多个</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">，如图中，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">administrator</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">就同时属于两个</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">。所以，在</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中关于</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">administrator</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">的记录就会是两条。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">这种关联方式才查询到管理组中人员的详细信息有哪些。综合起来，才可以知道一个管理组中的人员有谁，以及这个人员的详细信息。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">再结合上面谈到的</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">和</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">，就实现了需求中的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">操作，如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/816a79c7ce0d45e0bbd482932216d25e.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/816a79c7ce0d45e0bbd482932216d25e.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">其实，</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">管理组表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中仅仅记录着组的基本信息，如名称，组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">id</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">等等。至于一个组中人员的详细信息，以及该组能够执行的权限的详细信息，都记录在</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">人员表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">和</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中。两张</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">映射表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">才真正记录着一个组有哪些人员，能够执行哪些权限。通过两张映射表的衔接，三张实体表之间的交互才得以实现，</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">从而完成了需求中提到的</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span></strong><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">操作</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">我们再来看一下</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限分栏表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">与</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">之间的交互。这两张表之间的字段关联如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/28e02cb3e7b8499f9d4ea34661d7470e.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/28e02cb3e7b8499f9d4ea34661d7470e.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">两张表使用了</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">actioncolumnid</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">字段相关联，这种关联方式在数据库中的表现如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/4c738d32fee3446fa542c811c3674a99.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/4c738d32fee3446fa542c811c3674a99.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">如图所示，通过这种关联方式，我们可以非常清晰的看到</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">中的权限属于哪个分栏。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">现在，数据库结构已经很清晰了，分配权限的功能以及</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">操作都已经实现。下面我们再来分析一下需求中提到的关于权限管理系统的重用性问题。</span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">为什么使用这种数据库设计方式搭建起来的系统可以重用呢？</span></div>
<ul type="disc"><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">三张实体表中记录着系统中的三个决定性元素。</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">，</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">和</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">人</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">。而这三种元素可以任意添加，彼此之间不受影响。无论是那种类型的业务系统，这三个决定性元素是不会变的，也就意味着结构上不会变，而变的仅仅是数据。</span> </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">两张映射表中记录着三个元素之间的关系。</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">但这些关系完全是人为创建的，需要变化的时候，只是对数据库中的记录进行操作，无需改动结构。</span> </li><li mce_=""><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限分栏表中记录着系统使用时显示的分栏</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">。无论是要添加分栏，修改分栏还是减少分栏，也只不过是操作记录而已。</span> </li></ul>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">综上所述，这样设计数据库，系统是完全可以重用的，并且经受得住</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">变更</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">考验的。</span></div>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">总结：</span></strong></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">此套系统的重点在于，三张</span><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">实体表</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">牢牢地抓住了系统的核心成分，而两张映射表完美地映射出三张实体表之间的交互。其难点在于，理解映射表的工作，它记录着关系，并且实现了</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">组</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">操作的概念。而系统总体的设计是本着可以在不同的</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">MIS</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">系统中</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8220;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">重用</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">&#8221;</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">来满足不同系统的功能权限设置。</span></div>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">附录：</span></strong></div>
<div><strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">权限管理系统数据表的字段设计</span></strong></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">下面我们来看看权限管理系统的数据库表设计，共分为六张表，如下图：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表：</span></div>
<div><em><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/5ab64f8eea64419c91fb59420101cb7a.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/5ab64f8eea64419c91fb59420101cb7a.gif" /></span></em></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">action</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表中记录着系统中所有的动作，以及动作相关描述。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">actioncolumn</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/1f68619a720940e28ddf336b714d2fa6.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/1f68619a720940e28ddf336b714d2fa6.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">actioncolumn</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表中记录着动作的分栏，系统运行时，左侧菜单栏提供了几块不同的功能，每一块就是一个分栏，每添加一个分栏，该表中的记录就会增加一条</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">,</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">相对应的，左侧菜单栏中也会新增机一个栏。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">actiongroup</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/7253e0a97e6b42e8ab194ad83139351d.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/7253e0a97e6b42e8ab194ad83139351d.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">actiongroup</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表记录着动作所在的组。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupmanager</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/f64bd8a1c6194f1caa6943b1a7c87704.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/f64bd8a1c6194f1caa6943b1a7c87704.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">groupmanager</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表记录着管理组的相关信息，每添加一个管理组，这里的记录就会增加一条。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">mastergroup</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/e1b35565163843b6b403a5cb2303adda.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/e1b35565163843b6b403a5cb2303adda.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">mastergroup</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表记录着管理员所在的管理组，由于一名管理员可能同同时属于多个组，所以该表中关于某一名管理员的记录可能有多条。</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;">master</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表：</span></div>
<div><span style="font-size: 9pt" mce_style="font-size: 9pt;"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/c2d84c047f7e45bcab69c74bbeb7e035.gif" mce_src="http://p.blog.csdn.net/images/p_blog_csdn_net/mengyao/c2d84c047f7e45bcab69c74bbeb7e035.gif" /></span></div>
<div><strong><span style="font-size: 10pt" mce_style="font-size: 10pt;">　　</span></strong><span style="font-size: 9pt" mce_style="font-size: 9pt;">master</span><span style="font-size: 9pt" mce_style="font-size: 9pt;">表记录着所有管理员的信息，每添加一个管理员，该表就会增加一条记录。</span></div><br /><br />2.观点很好<br /><a href="http://www.cnblogs.com/leoxie2011/archive/2011/05/19/2050626.html">http://www.cnblogs.com/leoxie2011/archive/2011/05/19/2050626.html</a><br />
<h2><strong>一，前言&nbsp;</strong></h2>
<p>权限管理系统的应用者应该有三种不同性质上的使用，</p>
<p>A,使用权限</p>
<p>B,分配权限</p>
<p>C,授权权限&nbsp;</p>
<p>本文只从《使用权限》和《分配权限》这两种应用层面分析，暂时不考虑《授权权限》这种。</p>
<h2><span style="font-size: 28px; font-weight: bold" class="Apple-style-span">二，初步分析</span></h2>
<h3><span style="color: red">用户和角色&nbsp;</span></h3>
<p><span style="font-family: 宋体" class="Apple-style-span">说到权限管理，首先应该想到，当然要设计一个用户表，一个权限表。这样就决定了一个人有什么样的权限。</span></p>
<div>
<p><span style="font-family: 宋体">做着做着就会发现这样设计太过繁琐，如果公司里面所有员工都有这样的权限呢，每一个人都要配置？那是一件很痛苦的事情。因此再添加一个角色表，把某些人归为一类，然后再把权限分配给角色。角色属下的用户也就拥有了权限。</span></p>
<p><font class="Apple-style-span" face="宋体">用户、角色之间的关系是</font><span style="color: red">一个用户可以对应多个角色，一个角色可以对应多个用户。多对多关系。</span></p>
<p>所以需要一个中间表，相信大家都很熟悉，自然不会有疑问。</p>
<h4><span style="color: red">应用场景&nbsp;</span></h4>
<p>有了用户和角色以后，就需要设计应用场景，比如一个应用程序有几大模块（系统模块、项目管理模块、销售模块），</p>
<p>类似这样的模块就是一种应用场景，常见的还有 菜单 、 操作 等等。</p>
<p>假设现在我们设计好了，应用场景包括 模块、菜单、和操作，那么应该有以下六种关系</p>
<div>
<div>
<ol><li style="color: red"><span style="color: red">一个用户可以对应多个模块，一个模块可以对应多个用户。多对多关系。</span></li><li style="color: red"><span style="color: red">一个用户可以对应多个菜单，一个菜单可以对应多个用户。多对多关系。</span></li><li style="color: red"><span style="color: red">一个用户可以对应多个操作，一个操作可以对应多个用户。多对多关系。</span></li><li style="color: red"><span style="color: red">一个角色可以对应多个模块，一个模块可以对应多个角色。多对多关系。&nbsp;</span></li><li style="color: red"><span style="color: red">一个角色可以对应多个菜单，一个菜单可以对应多个角色。多对多关系。 &nbsp;</span></li><li style="color: red"><span style="color: red">一个角色可以对应多个操作，一个操作可以对应多个角色。多对多关系。</span> </li></ol></div></div>
<p>于是建立六张表来维护这六种关系。</p>
<p>这样设计看起来没什么问题。是的，如果没有加入新的关系的话，这样是已经可以满足大部分的需求了。可是如果就是如果，新的关系（需求）往往会加入到系统进来。这个时候就需要再建立一个新的表。系统的复杂度也随着增加。</p>
<p>可以看出，这样的设计有几个问题：</p>
<p>&nbsp;</p>
<ol><li style="color: #ff0000"><span style="color: #ff0000" class="Apple-style-span">数据表设计太复杂</span></li><li style="color: #ff0000"><span style="color: #ff0000" class="Apple-style-span">应对系统方案过于固定</span></li></ol>
<div>
<h2><span style="font-size: 28px; font-weight: bold">三，把问题简单化</span></h2></div>
<p>&nbsp;</p>
<p>&nbsp;<span style="font-family: 宋体" class="Apple-style-span">不同的应用场合，你可能会想出不同的需求，提了一个新的需求以后，可能会发现原来的设计没方法实现了，于是还要添加一个新的表。这也是上面所提到的问题。</span>&nbsp;</p>
<div>
<p>&nbsp;<span style="font-family: 宋体" class="Apple-style-span">其实不必想得那么复杂，权限可以简单描述为：</span></p>
<p><span style="font-family: 宋体; color: red">某某主体 在 某某领域 有 某某权限&nbsp;</span></p>
<p style="text-indent: -18pt; margin-left: 18pt"><span style="color: red">1，主体</span><span style="font-family: 宋体; color: red">可以是用户，可以是角色，也可以是一个部门</span></p>
<p style="text-indent: -18pt; margin-left: 18pt"><span style="color: red">2，&nbsp;</span><span style="font-family: 宋体; color: red">领域可以是一个模块，可以是一个页面，也可以是页面上的按钮</span></p>
<p style="text-indent: -18pt; margin-left: 18pt"><span style="color: red">3，&nbsp;</span><span style="font-family: 宋体; color: red">权限可以是&#8220;可见&#8221;，可以是&#8220;只读&#8221;，也可以是&#8220;可用</span><span style="color: red">&#8221;(</span><span style="font-family: 宋体; color: red">如按钮可以点击</span><span style="color: red">)</span></p>
<p>其实就是Who、What、How的问题</p>
<p><br /></p>
<p><span style="font-family: 宋体">因此上面所提到的六张表其实可以设计一张表：</span></p>
<p><font class="Apple-style-span" face="宋体"><br /></font></p>
<p>&nbsp;<img alt="" src="http://images.cnblogs.com/cnblogs_com/leoxie2011/pri.jpg" width="608" height="139" /></p>
<p>&nbsp;</p>
<h2>四，实例说明</h2>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">下面用一个例子做设计说明。&#8220;用户、角色在页面上的是使用权限&#8221;</span></p>
<p><span style="font-family: 宋体">详细设计：</span></p>
<p>1<span style="font-family: 宋体">，把菜单的配置放在数据库上，每一个菜单对于一个唯一的编码</span>MenuNo<span style="font-family: 宋体">，每一个&#8220;叶节点&#8221;的菜单项对于一个页面(url)。</span></p>
<p>2<span style="font-family: 宋体">，把按钮的配置放在数据库上</span><span style="font-family: 宋体">，并归属于一个菜单项上（其实就是挂在某一个页面上）。应该一个页面可能会有几个按钮组，比如说有两个列表，这两个列表都需要有&#8220;增加、修改、删除&#8221;。所以需要增加一个</span>按钮分组的<span style="font-family: 宋体">字段来区分。</span></p>
<p>3,把菜单权限分配给用户/角色，PrivilegeMaster为"User"或"Role",PrivilegeMasterValue为UserID或RoleID,PrivilegeAccess为&#8220;Menu",PrivilegeAccessValue为MenuNo,PrivilegeOperation为"enabled"</p>
<p>4,把按钮权限分配给用户/角色，PrivilegeMaster为"User"或"Role",PrivilegeMasterValue为UserID或RoleID,PrivilegeAccess为&#8220;Button",PrivilegeAccessValue为BtnID,PrivilegeOperation为"enabled"</p>
<p>5,如果需要禁止单个用户的权限，PrivilegeOperation&nbsp;设置为"disabled"。</p>
<p>如果不清楚的可以看下图：</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/leoxie2011/003.png" width="687" height="445" />&nbsp;</p>
<p>&nbsp;数据库设计：</p>
<p><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/leoxie2011/002.png" width="729" height="622" />&nbsp;</p></div>
<p>&nbsp;</p>
<div>
<h2>四，结语</h2></div>
<p>说了这么多，其实我推荐的只是Privilege的表设计。这个表是who、what、how问题原型的设计。不仅扩展性、灵活性都很好，而且将复杂的权限管理系统浓缩成一句话。</p>
<p>&nbsp;而PrivilegeOperation不仅仅只是使用和禁止两种，包括分配权限、授权权限，都可以用这个字段定义。只是这无疑加大了应用程序的设计难度，但是对于表设计可以不做出任何的修改就可以完成，可以看出其灵活性。&nbsp;</p></div><br /><br /><br /><br /><img src ="http://www.blogjava.net/CFJAVA/aggbug/364950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-11-28 06:30 <a href="http://www.blogjava.net/CFJAVA/archive/2011/11/28/364950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>几个不错的jQuery UI</title><link>http://www.blogjava.net/CFJAVA/archive/2011/11/25/364832.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Fri, 25 Nov 2011 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/11/25/364832.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/364832.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/11/25/364832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/364832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/364832.html</trackback:ping><description><![CDATA[<p><a href="http://www.ligerui.com/" target="_blank"><font color="#006699"></p>
<h4></font></a>1.JQuery Smart UI&nbsp; <a href="http://roy77.brinkster.net/" target="_blank"><font color="#006699">http://roy77.brinkster.net/</font></a> <br /><br /><strong>2.</strong><strong>angela UI</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://code.google.com/p/angela/" target="_blank"><font color="#006699">http://code.google.com/p/angela/</font></a> <br /><br /><strong>3.</strong>Liger UI框架 <a href="http://www.ligerui.com/ ">http://www.ligerui.com/ </a><br /><br />&nbsp;</h4>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/CFJAVA/aggbug/364832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-11-25 16:54 <a href="http://www.blogjava.net/CFJAVA/archive/2011/11/25/364832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBoss启动时报错</title><link>http://www.blogjava.net/CFJAVA/archive/2011/05/25/350963.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Wed, 25 May 2011 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/05/25/350963.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/350963.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/05/25/350963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/350963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/350963.html</trackback:ping><description><![CDATA[<p>...........<br />...................<br />16:08:51,765 ERROR [BaseModelMBean] Exception invoking method addChild<br />java.lang.ClassCastException: org.apache.naming.resources.FileDirContext cannot be cast to org.apache.naming.resources.Resource<br />&nbsp;at org.apache.catalina.util.ExtensionValidator.validateApplication(ExtensionValidator.java:182)<br />&nbsp;at org.apache.catalina.core.StandardContext.start(StandardContext.java:4178)<br />&nbsp;at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:790)<br />&nbsp;at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:770)<br />&nbsp;at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)<br />&nbsp;at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.apache.catalina.core.StandardContext.init(StandardContext.java:5312)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)<br />&nbsp;at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.web.tomcat.service.TomcatDeployer.performDeployInternal(TomcatDeployer.java:301)<br />&nbsp;at org.jboss.web.tomcat.service.TomcatDeployer.performDeploy(TomcatDeployer.java:104)<br />&nbsp;at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:375)<br />&nbsp;at org.jboss.web.WebModule.startModule(WebModule.java:83)<br />&nbsp;at org.jboss.web.WebModule.startService(WebModule.java:61)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at $Proxy0.start(Unknown Source)<br />&nbsp;at org.jboss.system.ServiceController.start(ServiceController.java:417)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy44.start(Unknown Source)<br />&nbsp;at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:466)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)<br />&nbsp;at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)<br />&nbsp;at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:87)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy45.start(Unknown Source)<br />&nbsp;at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy9.deploy(Unknown Source)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)<br />&nbsp;at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)<br />&nbsp;at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)<br />&nbsp;at org.jboss.Main.boot(Main.java:200)<br />&nbsp;at org.jboss.Main$1.run(Main.java:508)<br />&nbsp;at java.lang.Thread.run(Thread.java:619)<br />16:08:51,781 ERROR [BaseModelMBean] Exception invoking method init<br />javax.management.RuntimeOperationsException: Exception invoking method addChild<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.web.WebModule.startModule(WebModule.java:83)<br />&nbsp;at org.jboss.web.WebModule.startService(WebModule.java:61)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at $Proxy0.start(Unknown Source)<br />&nbsp;at org.jboss.system.ServiceController.start(ServiceController.java:417)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy44.start(Unknown Source)<br />&nbsp;at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:466)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)<br />&nbsp;at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)<br />&nbsp;at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:87)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy45.start(Unknown Source)<br />&nbsp;at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy9.deploy(Unknown Source)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at java.lang.Thread.run(Thread.java:619)<br />Caused by: java.lang.ClassCastException: org.apache.naming.resources.FileDirContext cannot be cast to org.apache.naming.resources.Resource<br />.....................&nbsp;<br />&nbsp;... 125 more<br />16:08:51,812 WARN&nbsp; [ServiceController] Problem starting service jboss.web.deployment:war=newsystem.war,id=1722179890<br />org.jboss.deployment.DeploymentException: Error during deploy; - nested throwable: (javax.management.RuntimeOperationsException: Exception invoking method init)<br />&nbsp;at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:384)<br />&nbsp;at org.jboss.web.WebModule.startModule(WebModule.java:83)<br />&nbsp;at org.jboss.web.WebModule.startService(WebModule.java:61)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at $Proxy0.start(Unknown Source)<br />&nbsp;at org.jboss.system.ServiceController.start(ServiceController.java:417)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy44.start(Unknown Source)<br />&nbsp;at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:466)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)<br />&nbsp;at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)<br />&nbsp;at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:87)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy45.start(Unknown Source)<br />&nbsp;at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy9.deploy(Unknown Source)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at $Proxy0.start(Unknown Source)<br />&nbsp;at org.jboss.system.ServiceController.start(ServiceController.java:417)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy4.start(Unknown Source)<br />&nbsp;at org.jboss.deployment.SARDeployer.start(SARDeployer.java:304)<br />&nbsp;at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br /><span style="color: red">&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)</span><br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy5.deploy(Unknown Source)<br />&nbsp;at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)<br />&nbsp;at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)<br />&nbsp;at org.jboss.Main.boot(Main.java:200)<br />&nbsp;at org.jboss.Main$1.run(Main.java:508)<br />&nbsp;at java.lang.Thread.run(Thread.java:619)<br />Caused by: javax.management.RuntimeOperationsException: Exception invoking method init<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:304)<br />&nbsp;at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.web.tomcat.service.TomcatDeployer.performDeployInternal(TomcatDeployer.java:301)<br />&nbsp;at org.jboss.web.tomcat.service.TomcatDeployer.performDeploy(TomcatDeployer.java:104)<br />&nbsp;at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:375)<br />&nbsp;... 112 more<br /><span style="color: red">Caused by: javax.management.RuntimeOperationsException: Exception invoking method addChild</span><br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:304)<br />&nbsp;at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.apache.catalina.core.StandardContext.init(StandardContext.java:5312)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)<br />&nbsp;... 117 more<br /><span style="color: red">Caused by: java.lang.ClassCastException: org.apache.naming.resources.FileDirContext cannot be cast to </span>org.apache.naming.resources.Resource<br />&nbsp;at org.apache.catalina.util.ExtensionValidator.validateApplication(ExtensionValidator.java:182)<br />&nbsp;at org.apache.catalina.core.StandardContext.start(StandardContext.java:4178)<br />&nbsp;at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:790)<br />&nbsp;at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:770)<br />&nbsp;at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)<br />&nbsp;... 125 more<br />16:08:51,859 ERROR [MainDeployer] Could not start deployment: file:/D:/jboss-4.2.3.GA/server/default/deploy/newsystem.war<br />org.jboss.deployment.DeploymentException: Error during deploy; - nested throwable: (javax.management.RuntimeOperationsException: Exception invoking method init)<br />&nbsp;at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:384)<br />&nbsp;at org.jboss.web.WebModule.startModule(WebModule.java:83)<br />&nbsp;at org.jboss.web.WebModule.startService(WebModule.java:61)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at $Proxy0.start(Unknown Source)<br />&nbsp;at org.jboss.system.ServiceController.start(ServiceController.java:417)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy44.start(Unknown Source)<br />&nbsp;at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:466)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)<br />&nbsp;at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)<br />&nbsp;at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:87)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)<br />&nbsp;at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy45.start(Unknown Source)<br />&nbsp;at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy9.deploy(Unknown Source)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)<br />&nbsp;at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)<br />&nbsp;at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)<br />&nbsp;at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)<br />&nbsp;at $Proxy0.start(Unknown Source)<br />&nbsp;at org.jboss.system.ServiceController.start(ServiceController.java:417)<br />&nbsp;at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy4.start(Unknown Source)<br />&nbsp;at org.jboss.deployment.SARDeployer.start(SARDeployer.java:304)<br />&nbsp;at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)<br />&nbsp;at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)<br />&nbsp;at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)<br />&nbsp;at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)<br />&nbsp;at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)<br />&nbsp;at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)<br />&nbsp;at $Proxy5.deploy(Unknown Source)<br />&nbsp;at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)<br />&nbsp;at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)<br />&nbsp;at org.jboss.Main.boot(Main.java:200)<br />&nbsp;at org.jboss.Main$1.run(Main.java:508)<br />&nbsp;at java.lang.Thread.run(Thread.java:619)<br />Caused by: javax.management.RuntimeOperationsException: Exception invoking method init<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:304)<br />&nbsp;at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.jboss.web.tomcat.service.TomcatDeployer.performDeployInternal(TomcatDeployer.java:301)<br />&nbsp;at org.jboss.web.tomcat.service.TomcatDeployer.performDeploy(TomcatDeployer.java:104)<br />&nbsp;at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:375)<br />&nbsp;... 112 more<br />Caused by: javax.management.RuntimeOperationsException: Exception invoking method addChild<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:304)<br />&nbsp;at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)<br />&nbsp;at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)<br />&nbsp;at org.apache.catalina.core.StandardContext.init(StandardContext.java:5312)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)<br />&nbsp;... 117 more<br />Caused by: java.lang.ClassCastException: org.apache.naming.resources.FileDirContext cannot be cast to org.apache.naming.resources.Resource<br />&nbsp;at org.apache.catalina.util.ExtensionValidator.validateApplication(ExtensionValidator.java:182)<br />&nbsp;at org.apache.catalina.core.StandardContext.start(StandardContext.java:4178)<br />&nbsp;at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:790)<br />&nbsp;at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:770)<br />&nbsp;at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br />&nbsp;at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:296)<br />&nbsp;... 125 more<br />16:08:51,875 ERROR [URLDeploymentScanner] Incomplete Deployment listing:</p>
<p>--- Incompletely deployed packages ---<br /><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#111;&#114;&#103;&#46;&#106;&#98;&#111;&#115;&#115;&#46;&#100;&#101;&#112;&#108;&#111;&#121;&#109;&#101;&#110;&#116;&#46;&#68;&#101;&#112;&#108;&#111;&#121;&#109;&#101;&#110;&#116;&#73;&#110;&#102;&#111;&#64;&#54;&#54;&#97;&#54;&#54;&#49;&#51;&#50;">org.jboss.deployment.DeploymentInfo@66a66132</a> { url=file:/D:/jboss-4.2.3.GA/server/default/deploy/newsystem.war }<br />&nbsp; deployer: MBeanProxyExt[jboss.web:service=WebServer]<br />&nbsp; status: Deployment FAILED reason: Error during deploy; - nested throwable: (javax.management.RuntimeOperationsException: Exception invoking method init)<br />&nbsp; state: FAILED<br />&nbsp; watch: file:/D:/jboss-4.2.3.GA/server/default/deploy/newsystem.war<br />&nbsp; altDD: null<br />&nbsp; lastDeployed: 1306224531437<br />&nbsp; lastModified: 1306224531296<br />&nbsp; mbeans:</p>
<p>--- MBeans waiting for other MBeans ---<br />ObjectName: jboss.web.deployment:war=newsystem.war,id=1722179890<br />&nbsp; State: FAILED<br />&nbsp; Reason: org.jboss.deployment.DeploymentException: Error during deploy; - nested throwable: (javax.management.RuntimeOperationsException: Exception invoking method init)</p>
<p>--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---<br />ObjectName: jboss.web.deployment:war=newsystem.war,id=1722179890<br />&nbsp; State: FAILED<br />&nbsp; Reason: org.jboss.deployment.DeploymentException: Error during deploy; - nested throwable: (javax.management.RuntimeOperationsException: Exception invoking method init)</p>
<p><br />16:08:52,078 INFO&nbsp; [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080<br />16:08:52,109 INFO&nbsp; [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009<br />16:08:52,125 INFO&nbsp; [Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)] Started in 52s:110ms</p>
<p><br />错误原因：<br />java.lang.ClassCastException: org.apache.naming.resources.FileDirContext cannot be cast to org.apache.naming.resources.Resource<br />意思是文件目录上下文不能转化org.apache.naming.resources.Resource.<br />通常lib下有文件目录或不是jar文件.<br /><br />解决办法：<br />检查你的/web-inf/lib/目录下是否包含了别的文件，比如空目录或jsp或其他文件，该目录做好只存放jar文件</p>
<p>&nbsp;</p> <img src ="http://www.blogjava.net/CFJAVA/aggbug/350963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-05-25 08:45 <a href="http://www.blogjava.net/CFJAVA/archive/2011/05/25/350963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.ClassNotFoundException: com.sun.to</title><link>http://www.blogjava.net/CFJAVA/archive/2011/03/15/346284.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Tue, 15 Mar 2011 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/03/15/346284.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/346284.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/03/15/346284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/346284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/346284.html</trackback:ping><description><![CDATA[在使用apache的ant或axis2 时 tomcat 抛出如下错误<br />
<br />
<span style="color: #ff0000">[ERROR] Error occurred generating WSDL file for Web service implementation cl<br />
&nbsp;{com.cf.service.HelloService}: {java.lang.ClassNotFoundException: com.sun.to<br />
.ws.spi.WSToolsObjectFactory}<br />
java.lang.ClassNotFoundException: com.sun.tools.ws.spi.WSToolsObjectFactory</span><br />
<br />
原因：<br />
&nbsp;&nbsp; tomcat找不到jdk的tools.jar<br />
<br />
解决办法：<br />
找打jdk的安装目录下的lib目录，把lib目录下的tools.jar 拷贝到tomcat的lib目录下即可。<br />
<br />
<img src ="http://www.blogjava.net/CFJAVA/aggbug/346284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-03-15 09:45 <a href="http://www.blogjava.net/CFJAVA/archive/2011/03/15/346284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>梅雪花树</title><link>http://www.blogjava.net/CFJAVA/archive/2011/03/10/346082.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Thu, 10 Mar 2011 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/03/10/346082.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/346082.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/03/10/346082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/346082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/346082.html</trackback:ping><description><![CDATA[<p>梅雪花树使用攻略<br />
<a href="http://www.cnblogs.com/xvqm00/archive/2010/04/26/1721173.html ">http://www.cnblogs.com/xvqm00/archive/2010/04/26/1721173.html </a></p>
<img src ="http://www.blogjava.net/CFJAVA/aggbug/346082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-03-10 15:05 <a href="http://www.blogjava.net/CFJAVA/archive/2011/03/10/346082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#中异步和多线程的区别</title><link>http://www.blogjava.net/CFJAVA/archive/2011/03/09/345994.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Wed, 09 Mar 2011 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/03/09/345994.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/345994.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/03/09/345994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/345994.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/345994.html</trackback:ping><description><![CDATA[<p>C#中异步和多线程的区别是什么呢？异步和多线程两者都可以达到避免调用线程阻塞的目的，从而提高软件的可响应性。甚至有些时候我们就认为异步和多线程是等同的概念。但是，异步和多线程还是有一些区别的。而这些区别造成了使用异步和多线程的时机的区别。</p>
<p>异步和多线程的区别之异步操作的本质</p>
<p>所有的程序最终都会由计算机硬件来执行，所以为了更好的理解异步操作的本质，我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生，硬盘、光驱的技术规格中都有明确DMA的模式指标，其实网卡、声卡、显卡也是有DMA功能的。DMA就是直 接内存访问的意思，也就是说，拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令，硬件就开 始自己和内存交换数据，在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS 这样的单进程（而且无线程概念）系统中也同样可以发起异步的DMA操作。</p>
<p>异步和多线程的区别之线程的本质</p>
<p>线程不是一个计算机硬件的功能，而是操作系统提供的一种逻辑功能，线程本质上是进程中一段并发运行的代码，所以线程需要操作系统投入CPU资源来运行和调度。</p>
<p>异步和多线程的区别之异步操作的优缺点</p>
<p>因为异步操作无须额外的线程负担，并且使用回调的方式进行处理，在设计良好的情况下，处理函数可以不必使用共享变量（即使无法完全不用，最起码可以减少 共享变量的数量），减少了死锁的可能。当然异步操作也并非完美无暇。编写异步操作的复杂程度较高，程序主要使用回调方式进行处理，与普通人的思维方式有些 初入，而且难以调试。</p>
<p>异步和多线程的区别之多线程的优缺点</p>
<p>多线程的优点很明显，线程中的处理程序依然是顺序执行，符合普通人的思维习惯，所以编程简单。但是多线程的缺点也同样明显，线程的使用（滥用）会给系统带来上下文切换的额外负担。并且线程间的共享变量可能造成死锁的出现。</p>
<p>适用范围</p>
<p>在了解了线程与异步操作各自的优缺点之后，我们可以来探讨一下线程和异步的合理用途。我认为：当需要执行I/O操作时，使用异步操作比使用线程+同步 I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写，还包括数据库操作、Web Service、HttpRequest以及.net Remoting等跨进程的调用。</p>
<p>而线程的适用范围则是那种需要长时间CPU运算的场合，例如耗时较长的图形处理和算法执行。但是往 往由于使用线程编程的简单和符合习惯，所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅，如果需要处 理大量的并发操作时就不合适了。</p>
<p>异步和多线程的区别实例研究</p>
<p>说了那么理论上的东西，可能有些兄弟早就不耐烦了，现在我们来研究几个实际的异步操作例子吧。</p>
<p>异步和多线程的区别实例：由delegate产生的异步方法到底是怎么回事？</p>
<p>大家可能都知道，使用delegate可以&#8220;自动&#8221;使一个方法可以进行异步的调用。从直觉上来说，我觉得是由编译器或者CLR使用了另外的线程来执行目标方法。到底是不是这样呢？让我们来用一段代码证明一下吧。</p>
<div class="cnblogs_Highlighter">
<div id="highlighter_255945" class="syntaxhighlighter  csharp">
<div class="bar                  ">
<div class="toolbar"><a style="width: 16px; height: 16px" class="item viewSource" title="view source" href="#viewSource" highlighterid="highlighter_255945" commandname="viewSource">view source</a><a style="width: 16px; height: 16px" class="item printSource" title="print" href="#printSource" highlighterid="highlighter_255945" commandname="printSource">print</a><a style="width: 16px; height: 16px" class="item about" title="?" href="#about" highlighterid="highlighter_255945" commandname="about">?</a></div>
</div>
<div class="lines">
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>01</code></td>
            <td class="content"><code class="csharp keyword">using</code> <code class="csharp plain">System;&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>02</code></td>
            <td class="content"><code class="csharp keyword">using</code> <code class="csharp plain">System.Threading; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>03</code></td>
            <td class="content"><code class="csharp keyword">namespace</code> <code class="csharp plain">AsyncDelegateDemo </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>04</code></td>
            <td class="content"><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>05</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">delegate</code> <code class="csharp keyword">void</code> <code class="csharp plain">AsyncFoo(</code><code class="csharp keyword">int</code> <code class="csharp plain">i); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>06</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">class</code> <code class="csharp plain">Program </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>07</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>08</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤summary﹥&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>09</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// 输出当前线程的信息&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>10</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤/summary﹥&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>11</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤param name="name"﹥方法名称﹤/param﹥&nbsp;&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>12</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">PrintCurrThreadInfo(</code><code class="csharp keyword">string</code> <code class="csharp plain">name) </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>13</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>14</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.WriteLine(</code><code class="csharp string">"Thread Id of "</code> <code class="csharp plain">+ name + </code><code class="csharp string">" is: "</code> <code class="csharp plain">+ Thread.CurrentThread.ManagedThreadId + </code><code class="csharp string">", current thread is "</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>15</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">+ (Thread.CurrentThread.IsThreadPoolThread ? </code><code class="csharp string">""</code> <code class="csharp plain">: </code><code class="csharp string">"not "</code><code class="csharp plain">) + </code><code class="csharp string">"thread pool thread."</code><code class="csharp plain">); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>16</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">} </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>17</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>18</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>19</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤summary﹥&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>20</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// 测试方法，Sleep一定时间&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>21</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤/summary﹥&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>22</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤param name="i"﹥Sleep的时间﹤/param﹥&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>23</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">Foo(</code><code class="csharp keyword">int</code> <code class="csharp plain">i) </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>24</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>25</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">PrintCurrThreadInfo(</code><code class="csharp string">"Foo()"</code><code class="csharp plain">);&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>26</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Thread.Sleep(i); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>27</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">} </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>28</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>29</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>30</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤summary﹥&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>31</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// 投递一个异步调用&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>32</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp color1">/// ﹤/summary﹥&nbsp;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>33</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">PostAsync() </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>34</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>35</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">AsyncFoo caller = </code><code class="csharp keyword">new</code> <code class="csharp plain">AsyncFoo(Foo); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>36</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">caller.BeginInvoke(1000, </code><code class="csharp keyword">new</code> <code class="csharp plain">AsyncCallback(FooCallBack), caller); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>37</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">} </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>38</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>39</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>40</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">Main(</code><code class="csharp keyword">string</code><code class="csharp plain">[] args) </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>41</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>42</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">PrintCurrThreadInfo(</code><code class="csharp string">"Main()"</code><code class="csharp plain">); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>43</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">for</code> <code class="csharp plain">(</code><code class="csharp keyword">int</code> <code class="csharp plain">i = 0; i &lt; 100; i++) </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>44</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>45</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">PostAsync(); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>46</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">}&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>47</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">Console.ReadLine(); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>48</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">} </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>49</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>50</code></td>
            <td class="content"><code class="spaces">&nbsp;</code>&nbsp;</td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>51</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp keyword">static</code> <code class="csharp keyword">void</code> <code class="csharp plain">FooCallBack(IAsyncResult ar) </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>52</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">{ </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>53</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">PrintCurrThreadInfo(</code><code class="csharp string">"FooCallBack()"</code><code class="csharp plain">); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>54</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">AsyncFoo caller = (AsyncFoo)ar.AsyncState;&nbsp; </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>55</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">caller.EndInvoke(ar); </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>56</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">} </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt1">
<table>
    <tbody>
        <tr>
            <td class="number"><code>57</code></td>
            <td class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="csharp plain">} </code></td>
        </tr>
    </tbody>
</table>
</div>
<div class="line alt2">
<table>
    <tbody>
        <tr>
            <td class="number"><code>58</code></td>
            <td class="content"><code class="csharp plain">}</code></td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>异步和多线程的区别实例代码的输出如下：</p>
<p>Thread Id of Main() is: 1,&nbsp;&nbsp; </p>
<p>current thread is not thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of Foo() is: 3,&nbsp;&nbsp; </p>
<p>current thread is thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of FooCallBack() is: 3,&nbsp;&nbsp; </p>
<p>current thread is thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of Foo() is: 3,&nbsp;&nbsp; </p>
<p>current thread is thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of Foo() is: 4,&nbsp;&nbsp; </p>
<p>current thread is thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of Foo() is: 5,&nbsp;&nbsp; </p>
<p>current thread is thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of FooCallBack() is: 3,&nbsp;&nbsp; </p>
<p>current thread is thread pool thread.&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>Thread Id of Foo() is: 3, </p>
<img src ="http://www.blogjava.net/CFJAVA/aggbug/345994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-03-09 09:04 <a href="http://www.blogjava.net/CFJAVA/archive/2011/03/09/345994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>axis2发布webservice时报 JAXB 2.0 API is being loaded from the bootstrap classloader...</title><link>http://www.blogjava.net/CFJAVA/archive/2011/03/07/345872.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Mon, 07 Mar 2011 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/03/07/345872.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/345872.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/03/07/345872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/345872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/345872.html</trackback:ping><description><![CDATA[根据错误提示原因好像是jar包冲突，折腾了一上午都没有解决。<br />
<br />
最终还是解决了。分享一下<br />
<br />
1.在tomcat安装的根目录下建endorsed文件夹<br />
<br />
2.将axis2\WEB-INF\lib下的jaxb-api-2.1.jar和jaxb-impl-2.1.7.jar拷贝到刚建好的endorsed目录下(针对Tomcat6.x版本)
 <img src ="http://www.blogjava.net/CFJAVA/aggbug/345872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-03-07 13:01 <a href="http://www.blogjava.net/CFJAVA/archive/2011/03/07/345872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>window操作系统下端口查看</title><link>http://www.blogjava.net/CFJAVA/archive/2011/03/07/345856.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Mon, 07 Mar 2011 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/03/07/345856.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/345856.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/03/07/345856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/345856.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/345856.html</trackback:ping><description><![CDATA[<p>1.运行cmd<br />
<br />
2.输入netstat -a -n</p>
<img src ="http://www.blogjava.net/CFJAVA/aggbug/345856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-03-07 09:48 <a href="http://www.blogjava.net/CFJAVA/archive/2011/03/07/345856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回家一星期了</title><link>http://www.blogjava.net/CFJAVA/archive/2011/02/25/345100.html</link><dc:creator>soldieryoung</dc:creator><author>soldieryoung</author><pubDate>Fri, 25 Feb 2011 00:31:00 GMT</pubDate><guid>http://www.blogjava.net/CFJAVA/archive/2011/02/25/345100.html</guid><wfw:comment>http://www.blogjava.net/CFJAVA/comments/345100.html</wfw:comment><comments>http://www.blogjava.net/CFJAVA/archive/2011/02/25/345100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/CFJAVA/comments/commentRss/345100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/CFJAVA/services/trackbacks/345100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 回到了那个陌生又熟悉的地方，生我养我的小县城——西峡。 
<img src ="http://www.blogjava.net/CFJAVA/aggbug/345100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/CFJAVA/" target="_blank">soldieryoung</a> 2011-02-25 08:31 <a href="http://www.blogjava.net/CFJAVA/archive/2011/02/25/345100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>