﻿<?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-拾贝壳-随笔分类-OPEN SOURCE</title><link>http://www.blogjava.net/huabingl/category/11666.html</link><description>走过的路</description><language>zh-cn</language><lastBuildDate>Tue, 19 Feb 2008 08:08:29 GMT</lastBuildDate><pubDate>Tue, 19 Feb 2008 08:08:29 GMT</pubDate><ttl>60</ttl><item><title>axis userguide(2)</title><link>http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 17 Feb 2008 04:17:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180248.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180248.html</trackback:ping><description><![CDATA[<p>发布service<br />
有2种发布方式，一种是实例发布，一种是描述符发布<br />
实例发布很简单<br />
&nbsp; 把我们的java源文件拷贝到axis目录下，改扩展名为jws<br />
&nbsp; 然后就可以直接访问了，例如：<br />
java samples.userguide.example2.CalcClient -p8080 add 2 5<br />
&nbsp;他将调用add方法，传递的2个变量分别为2和5。<br />
很显然，第一种方法有很多弊端，比如需要源文件，不能有包路径等等<br />
描述符发布<br />
一个最简单的例子如下：<br />
&lt;deployment xmlns="http://xml.apache.org/axis/wsdd/"<br />
&nbsp;&nbsp;&nbsp; xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;<br />
&nbsp; &lt;service name="MyService" provider="java:RPC"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="className" value="samples.userguide.example3.MyService"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br />
&nbsp; &lt;/service&gt;<br />
&lt;/deployment&gt;<br />
一个服务是一个targeted chain ,可能包含下面的一些或者全部：请求Handler，pivot Handler 支点Handler，响应Handler。支点hander在服务中叫做provider,在例子中我们的provider是java:RPC，他被axis内嵌，代表了Java RPC service，具体的类是org.apache.axis.providers.java.RPCProvider.<br />
我们告诉RPCProvider 我们要调用的服务MyService，并以参数的形式告诉他具体的目标以及可以被调用的方法。<br />
我们也可以给我们要调用的对象设置作用范围scope,和servlet的scope一样，有request,session,application.<br />
我们需要把这个描述符定义的内容告诉应用服务器才能真正提供我们需要的服务。<br />
如果已经部署axis到tomcat,我们可以这样发布<br />
org.apache.axis.client.AdminClient deploy.wsdd<br />
这样我们的服务就可以通过soap来访问了<br />
测试一下<br />
java samples.userguide.example3.Client<br />
&nbsp; -lhttp://localhost:8080/axis/services/MyService "test me!"<br />
可以通过下面来查看所有已经部署的服务<br />
java org.apache.axis.client.AdminClient list<br />
来看看更进一步的应用，使用一下request handler<br />
&lt;deployment xmlns="http://xml.apache.org/axis/wsdd/"<br />
&nbsp;&nbsp;&nbsp; xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"&gt;<br />
&nbsp; &lt;!-- define the logging handler configuration --&gt;<br />
&nbsp; &lt;handler name="track" type="java:samples.userguide.example4.LogHandler"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="filename" value="MyService.log"/&gt;<br />
&nbsp;&nbsp; &lt;/handler&gt;</p>
<p>&nbsp; &lt;!-- define the service, using the log handler we just defined --&gt;<br />
&nbsp; &lt;service name="LogTestService" provider="java:RPC"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;requestFlow&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;handler type="track"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/requestFlow&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;parameter name="className" value="samples.userguide.example4.Service"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br />
&nbsp; &lt;/service&gt;<br />
&lt;/deployment&gt;<br />
这个例子会在客户端掉用LogTestService的时候，先调用samples.userguide.example4.LogHandler作记录操作<br />
远程管理<br />
默认状态下，axis只允许在axis部署的机器上使用管理请求，如果希望在其他的机器上进行管理操作可以参照下面的例子</p>
<p>&lt;service name="AdminService" provider="java:MSG"&gt;<br />
&nbsp; &lt;parameter name="className" value="org.apache.axis.util.Admin"/&gt;<br />
&nbsp; &lt;parameter name="allowedMethods" value="*"/&gt;<br />
&nbsp; &lt;parameter name="enableRemoteAdmin" value="true"/&gt;<br />
&lt;/service&gt;<br />
注意，这样配置需要作必要的安全配置</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/180248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-17 12:17 <a href="http://www.blogjava.net/huabingl/archive/2008/02/17/180248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osworkflow几个主要组件和概念 </title><link>http://www.blogjava.net/huabingl/archive/2008/02/17/180236.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 17 Feb 2008 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/17/180236.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180236.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/17/180236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180236.html</trackback:ping><description><![CDATA[<p>原文见:<br />
<br />
</p>
http://blog.csdn.net/huabingl/archive/2008/02/12/2089145.aspx
<img src ="http://www.blogjava.net/huabingl/aggbug/180236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-17 10:36 <a href="http://www.blogjava.net/huabingl/archive/2008/02/17/180236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用opencms java API获取资源信息</title><link>http://www.blogjava.net/huabingl/archive/2008/02/17/180234.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 17 Feb 2008 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/17/180234.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180234.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/17/180234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180234.html</trackback:ping><description><![CDATA[<p>原文见<br />
<br />
</p>
http://blog.csdn.net/huabingl/archive/2008/02/12/2088711.aspx
<img src ="http://www.blogjava.net/huabingl/aggbug/180234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-17 10:34 <a href="http://www.blogjava.net/huabingl/archive/2008/02/17/180234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opencms分页 </title><link>http://www.blogjava.net/huabingl/archive/2008/02/17/180233.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 17 Feb 2008 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2008/02/17/180233.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/180233.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2008/02/17/180233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/180233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/180233.html</trackback:ping><description><![CDATA[<p>opencms列表显示<br />
&nbsp;先准备要显示的数据。比如在站点下建立一个sports目录，里面以news的格式放入一些xmlpage.<br />
&nbsp; 注意给这些xmlpage准备好detail显示页面。<br />
&lt;%@ taglib prefix="cms" uri="<a href="http://www.opencms.org/taglib/cms">http://www.opencms.org/taglib/cms</a>" %&gt;<br />
&lt;%@ page import="java.util.*"%&gt;<br />
&lt;%@ page import="org.opencms.jsp.*"%&gt;</p>
<p>&lt;%<br />
String sPageIndex=request.getParameter("pageIndex");<br />
int iPageIndex=1;<br />
if(sPageIndex!=null){<br />
iPageIndex=Integer.parseInt(sPageIndex);<br />
}</p>
<p>&nbsp;pageContext.setAttribute("pageIndex", iPageIndex+"");<br />
%&gt;<br />
&lt;cms:contentload collector="allInFolderDateReleasedDesc" param="/myfirstsite/sports/%(number)_news.html|news" pageIndex="%(pageContext.pageIndex)" pageSize="2"&gt;<br />
&lt;cms:contentinfo var="contentInfo" scope="request" /&gt;<br />
&lt;a href="&lt;cms:link&gt;&lt;cms:contentshow element="%(opencms.filename)"/&gt;&lt;/cms:link&gt;" target=_blank&gt;&lt;cms:contentshow element="Title"/&gt; &lt;/a&gt;<br />
&lt;%out.println("---");%&gt;<br />
&lt;/cms:contentload&gt;<br />
&lt;%<br />
CmsContentInfoBean info&nbsp; = (CmsContentInfoBean)request.getAttribute("contentInfo");<br />
int totalNum=info.getResultSize();<br />
%&gt;<br />
共&lt;%=totalNum%&gt;条数据,当前第&lt;%=info.getPageIndex()%&gt;/&lt;%=info.getPageCount()%&gt;<br />
&lt;a href="list_taglib?pageIndex=&lt;%=info.getPageNavStartIndex()%&gt;"&gt;第一页&lt;/a&gt;<br />
&lt;a href="list_taglib?pageIndex=&lt;%=(info.getPageNavStartIndex()-1)&gt;0?(info.getPageNavStartIndex()-1):1%&gt;"&gt;上一页&lt;/a&gt;<br />
&lt;a href="list_taglib?pageIndex=&lt;%=(info.getPageNavStartIndex()+1)&gt;info.getPageCount()?info.getPageCount():(info.getPageNavStartIndex()+1)%&gt;"&gt;下一页&lt;/a&gt;<br />
&lt;a href="list_taglib?pageIndex=&lt;%=info.getPageNavEndIndex()%&gt;"&gt;最后页&lt;/a&gt;<br />
上面的例子力求尽可能少的使用标签。主要使用了CmsContentInfoBean ，CmsJspXmlContentBean ，I_CmsXmlContentContainer（CmsJspTagContentLoad ）等多个对象。分页的关键在CmsContentInfoBean 和 CmsJspTagContentLoad的关系上。&nbsp;</p>
<p>参考资料:</p>
<p><a href="http://www.javaedu.com/bbs/viewthread?thread=128">http://www.javaedu.com/bbs/viewthread?thread=128</a></p>
<p><u><font color="#800080"><a href="http://wangyi878750.blog.sohu.com/41725191.html">http://wangyi878750.blog.sohu.com/41725191.html</a></font></u></p>
<p><a href="http://l--w.blog.sohu.com/47996664.html">http://l--w.blog.sohu.com/47996664.html</a></p>
<p><a href="http://wangyi878750.blog.sohu.com/41378072.html">http://wangyi878750.blog.sohu.com/41378072.html</a></p>
<p><u><font color="#800080"><a href="http://tag.blog.sohu.com/opencms/?pg=1"></a></font></u></p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/180233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2008-02-17 10:31 <a href="http://www.blogjava.net/huabingl/archive/2008/02/17/180233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sliding into WebDAV</title><link>http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 03 Jan 2007 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/91624.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/91624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/91624.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Sliding into WebDAV&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/91624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2007-01-03 20:49 <a href="http://www.blogjava.net/huabingl/archive/2007/01/03/91624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HibernateTemplate方法</title><link>http://www.blogjava.net/huabingl/archive/2006/12/26/90128.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Tue, 26 Dec 2006 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/12/26/90128.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/90128.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/12/26/90128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/90128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/90128.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: HibernateTemplate方法索引&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2006/12/26/90128.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/90128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-12-26 15:47 <a href="http://www.blogjava.net/huabingl/archive/2006/12/26/90128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webdav使用指南</title><link>http://www.blogjava.net/huabingl/archive/2006/12/10/86663.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 10 Dec 2006 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/12/10/86663.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/86663.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/12/10/86663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/86663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/86663.html</trackback:ping><description><![CDATA[<p>&nbsp; 最近研究了一下webdav,关于webdav的详细信息可以在 google上搜索或者参看官方网站<a href="http://www.webdav.org/">http://www.webdav.org</a>.<br>&nbsp; "WebDAV stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers. "<br>&nbsp;笔者简单的尝试了它下面的slide和mod_dav.<br><span style="COLOR: #ff0000">slide是jakarta下面的子项目</span>,分为服务端和客户端.个人认为服务端是专门为tomcat定做的一个webdav实现.关于slide,javaeye上有些讨论,可以参考<a href="http://www.javaeye.com/t/5267.html">http://www.javaeye.com/t/5267.html</a>.本人涉入的不是很深,中文问题让我碰到了,slide提供2中存储方式,文件形式和数据库形式,限于时间,笔者没有对数据库形式进行测试.slide的工作目录默认在服务器bin目录下.<br><span style="COLOR: #ff0000">用mod_dav来实现</span>相比就简单多了,如果你熟悉apache httpserver,应该很容易搞定.http://www.webdav.org/mod_dav/ 上的有部分资料.可以根据<a href="http://www.webdav.org/mod_dav/install.html">http://www.webdav.org/mod_dav/install.html</a>&nbsp;的讲解来配置.apache server1.3以后(包括1.3)在发布的时候都自带了mod_dav包.需要做的就是加载和配置它.<br>LoadModule dav_module libexec/libdav.so<br>AddModule mod_dav.c<br>笔者在配置的时候由于没有认真看文档,犯了个小小的错误.所以注意下面的文字:<br>"In the following example, the DAV lock database will be stored in the /usr/local/apache/var directory (which must be writable by the server process). The file's name will be DAVLock when mod_dav needs to create it. <br>(actually, mod_dav will create one or more files using this file name plus an extension) </p>
<p>DAVLockDB /usr/local/apache/var/DAVLock"<br>然后你需要配置一个webdav的工作目录,由于访问apache服务的用户会默认是nobody用户,所以你至少得让工作目录对nobody可读写.在目录的定义中加入DAV on这样的属性就 ok了<br>eg:<br>"Alias /pages /home/www/davhome<br>&lt;Location /pages&gt;<br>&nbsp;&nbsp;&nbsp; DAV On<br>&lt;/Location&gt;<br>"<br><span style="COLOR: #ff0000">测试webdav<br></span>安装完webdav后，你可以做简单的测试：<br>&nbsp;&nbsp; IE浏览器-〉文件-〉打开，然后输入配置的url，<a href="http://127.0.0.1/pages">http://127.0.0.1/pages</a>,选上"以Web文件夹方式打开".可以看到效果。<br><span style="COLOR: #ff0000">客户端API.</span><br>如果是 java可以 采用slide的客户端.(php用户咋办?).<br>这个最新的客户端使用的是最新的jdom,注意哦..<br>参考资料：<br><a href="http://www.uplinux.com/www/net/02/131.shtml">http://www.uplinux.com/www/net/02/131.shtml</a><br><br></p>
<img src ="http://www.blogjava.net/huabingl/aggbug/86663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-12-10 12:40 <a href="http://www.blogjava.net/huabingl/archive/2006/12/10/86663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mvnforum权限系统分析</title><link>http://www.blogjava.net/huabingl/archive/2006/09/19/70435.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Tue, 19 Sep 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/09/19/70435.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/70435.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/09/19/70435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/70435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/70435.html</trackback:ping><description><![CDATA[
		<p>   mvnforum是一个开源的论坛软件.网址如下:<br /><a href="http://sourceforge.net/projects/mvnforum/">http://sourceforge.net/projects/mvnforum/</a><br />   本文主要研究它的权限部分,以作为使用借鉴.<br />   这里有篇中文的文档,以作参考:<br />  <a href="http://www.cn-java.com/target/news.php?news_id=3298">http://www.cn-java.com/target/news.php?news_id=3298</a></p>
		<p>
				<br />权限部分的UML图如下:<br />   <img src="http://www.blogjava.net/images/blogjava_net/huabingl/13357/r_mvnforum_permission.jpg" /></p>
		<p>数据流程:<br />1，系统从OnlineUserManager这个入口进入.这个部件有个Map用来存储当前的非过期用户。OnlineUserManager会先根据当前时间和最后一个用户的请求时间做对比，检查是否有刷新过期用户的必要，如果超过所设置的时间，那么先更新Map。然后OnlineUserManager根据提供的用户的 sessionid和username在这个Map中查找。如果找到，则刷新该用户的最后一次访问时间；否则，OnlineUserManager调用OnlineUserFactory部件创建该OnlineUser，并把这个OnlineUser存入Map之中。<br />判对用户是否过期的原理是:从OnlineUser的OnlineUserAction中取出最后一次的访问时间和当前时间做对比.<br />2，OnlineUserFactory负责创建OnlineUser并为该OnlineUser提供完整的权限信息.OnlineUser包括3大部分信息,一部分是用户的基本信息,一部分是用户的权限信息,一部分是用户的在线信息.在线信息由OnlineUserManager负责管理,其他2部分信息由OnlineUserFactory从持久层获得.<br />获得权限信息并把它设置到OnlineUser部件上,提供给OnlineUserManager管理.<br />3.CNMPermissionFactory类似我们常说的service.主要负责和持久层通信,最终返回一个CNMPermission部件供OnlineUserFactory合成OnlineUser部件.在下面的章节里,笔者会对他细化讨论.<br />权限结构:<br />用来实现用户权限的主要的是CNMPermission接口和他是2个子类AbstractPermission和CNMPermissionImpl.CNMPermission接口负责定义权限有关的常量和对外API.AbstractPermission设置了保存权限信息的变量并实现了CNMPermission接口中定义的抽象方法,因此,笔者把这个抽象类叫做鉴权类.CNMPermissionImpl 则负责对AbstractPermission使用的变量进行设值,因此,笔者称之为赋权类.<br />先看看AbstractPermission的结构。这里涉及到这么几个概念：全局权限，特定权限，单个权限，组合权限。<br />全局权限用true/false来设置。<br />特定权限是指某一个动作所作用的不同的对象。比如：某用户只能将写操作作用于1，2，4这3个论坛板块之上。表示为这个特定权限内部的ArrayList容器中只有1，2，4三个编号。<br />单个权限是指单个动作。比如读操作。<br />组合权限是为了方便设置提供的对单个权限的组合。比如对某用户一次设置某板块的“读”和“发布”2种权限。<br />前2种权限是一个纬度的划分，后2个是另一个纬度的划分。<br />如何鉴权？<br />鉴权的接口都会在CNMPermission中定义。对全局权限，直接返回对应的标志位的值，对于特定权限，则先判断是否特定权限全开，否，则然后判断其ArrayList中是否包含对应的对象编号。<br />如何赋权？<br />这里要承接到上述数据流程的第三步。由CNMPermissionFactory根据一定先后循序（其实无关顺序，因为采用的为真覆盖原则，即持久层返回的权限都是真值，后面的真值对前面的真值可覆盖）从持久层获得所有的全局权限和特定权限。mvnforum只有用户和角色2种概念（当然也可以扩展），因此它的顺序是：用户全局全县-〉用户特定权限-〉角色全局全县-〉角色特定权限。当然无论哪一部都是对同一个CNMPermission进行操作。<br />无论在设置全局权限还是特定权限的时候都可能会遇到所定义的组合权限。具体的组合权限拆分是由CNMPermissionImpl来做的.<br />相关的表结构：<br />   member表，存贮用户基本信息。<br />   membergroup ,存储用户和组（角色）的对应关系。<br />   groups表，存储组/角色的基本信息<br />   grouppermission，存储组/角色的全局权限,字段为groupid permissionid<br />   groupforum，存储组/角色 的论坛权限, 字段为groupid ,forum,permissionid<br />   memberpermission 存贮用户的全局权限,字段为 memberid permissionid<br />   memberforum 存贮用户的论坛权限,字段为memberid ,forum,permissionid</p>
		<p>
				<br />  修改于2006/12/16  晚8时<br /></p>
<img src ="http://www.blogjava.net/huabingl/aggbug/70435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-09-19 10:07 <a href="http://www.blogjava.net/huabingl/archive/2006/09/19/70435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenLDAP快速上手</title><link>http://www.blogjava.net/huabingl/archive/2006/08/26/65886.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sat, 26 Aug 2006 00:37:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/08/26/65886.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/65886.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/08/26/65886.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/65886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/65886.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">OpenLDAP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">快速上手</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>Ben </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的项目里面要用到</span>
				<span lang="EN-US">OpenLDAP,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我的项目里面也要用到</span>
				<span lang="EN-US">LDAP,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所以这</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">天集中看了一下</span>
				<span lang="EN-US">LDAP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相关的内容。做了个笔记，也算是为人类知识的积累做点或有或无的贡献。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">   </span>OpenLDAP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的官方站点是</span>
				<span lang="EN-US">
						<a href="http://www.openldap.org/">http://www.openldap.org</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面有个</span>
				<span lang="EN-US">QuickStart,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我将大致按照这个来讲解。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一、</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装</span>
				<span lang="EN-US">
						<br />
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在官方站点上发布的是</span>
				<span lang="EN-US">linux/unix</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的</span>
				<span lang="EN-US">OpenLDAP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">源文件，当然也很容易找到</span>
				<span lang="EN-US">windows</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统下的版本。笔者学习安装的就是</span>
				<span lang="EN-US">windows</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">二、</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">OpenLDAP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个用户最关注的配置文件。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个是</span>
				<em>
						<span lang="EN-US">slapd.conf</span>
				</em>
				<em>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在他里面定义了最基本的</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">DN</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及管理员的账号和密码。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另一个是</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">LDIF</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文件。在它里面可以配置所有的用户和组织。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 60.0pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们先来了解</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">LDAP</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的相关概念。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<br />
						</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们知道</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">LDAP</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的全称为（</span>
				</em>
				<span lang="EN-US">Lightweight Directory Access Protocol</span>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），即轻量级目录访问协议。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<b>
								<span lang="EN-US" style="FONT-STYLE: normal">Ldap</span>
						</b>
				</em>
				<em>
						<b>
								<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是怎样的一个结构呢</span>
						</b>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">？用官方的话说：“</span>
				</em>
				<span lang="EN-US">In LDAP, directory entries are arranged in a hierarchical tree-like structure. Traditionally, this structure reflected the geographic and/or organizational boundaries. Entries representing countries appear at the top of the tree. Below them are entries representing states and national organizations. Below them might be entries representing organizational units, people, printers, documents, or just about anything else you can think of..</span>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”他是一个树状的结构。每一个节点被称为一个</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">Entry</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这些</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">Entry</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有着有趣的含义。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面是他的</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">2</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个实例。一个反映了</span>
				</em>
				<span lang="EN-US">geographic</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，一个反映了</span>
				<span lang="EN-US">organizational</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。<br /></span>
				<span lang="EN-US">
						<img src="http://www.openldap.org/doc/admin23/intro_tree.gif" />
						<br />                                                           传统命名<br /><img src="http://www.openldap.org/doc/admin23/intro_dctree.gif" /><br />                                                           网络命名<br /><br /></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们来看看个个节点的定义方式。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<b>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">每个</span>
						<span lang="EN-US">Entry</span>
				</b>
				<b>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都有一个自己得一个标示</span>
				</b>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我们把他叫</span>
				<span lang="EN-US">DN(Distinguished Name)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，这个</span>
				<span lang="EN-US">dn</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包含了一个</span>
				<span lang="EN-US">RDN</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">Relative Distinguished Name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。在上面的第二个图例</span>
				<span style="FONT-FAMILY: 宋体">中，<span lang="EN-US">Barbara Jensen的RDN是</span></span>
				<tt>
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ansi-font-size: 10.5pt">uid=babs，他的dn是</span>
				</tt>
				<tt>
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ansi-font-size: 10.5pt">uid=babs,ou=People,dc=example, dc=com。<o:p></o:p></span>
				</tt>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<tt>
						<b>
								<span style="FONT-FAMILY: 宋体; mso-ansi-font-size: 10.5pt">每个节点都需要一个类别</span>
						</b>
				</tt>
				<tt>
						<span style="FONT-FAMILY: 宋体; mso-ansi-font-size: 10.5pt">，</span>
				</tt>
				<tt>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ansi-font-size: 10.5pt">这个类别信息用<span lang="EN-US">objectClass来表示。ObjectClass就是该节点的schema,他定义了该节点该有和不该有的属性。默认的objectClass都在schema/core.schema中有定义。如果在你的配置过程中出现了关于找不到objectClass的问题，您不妨参看一下这里面有没有你用到的objectClass</span></span>
				</tt>
				<tt>
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ansi-font-size: 10.5pt">.</span> 在schema文件夹下还有其他一些schema文件,你也可以定义自己的schema.想要加载其他的schema,你可以在slapd.conf文件中用include加入.如:<font face="宋体">include  ./schema/core.schema.</font></tt>
				<span style="FONT-FAMILY: 宋体">为了方便识别，其实我们在<span lang="EN-US">DN里面用的都是objectClass的简写形式。如：ou代表organizationUnit，c代表country,st代表state,dc代表？？等。</span></span>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 60.0pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">2、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来看看</span>
						<span lang="EN-US">slapd.conf</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个文件</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<br />
						</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个文件的主要信息是如下几行：</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">database bdb <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">suffix "dc=&lt;MY-DOMAIN&gt;,dc=&lt;COM&gt;" <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">rootdn "cn=Manager,dc=&lt;MY-DOMAIN&gt;,dc=&lt;COM&gt;" <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">rootpw secret <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">directory /usr/local/var/openldap-data<o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">定义了数据库，最基本的后缀，管理员的</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dn</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和密码，以及数据存放路径。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编辑好这个文件，我们就可以启动了。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你把</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">ldap</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安装为</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">windows</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务，你可以像我一样启动：</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">net start OpenLDAP-slapd<o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal"> <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 60.0pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">3、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们主要操作的就是这个</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">LDIF</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<br />
						</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们需要在这个文件里面加入所需要的</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dn.<o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意，因为我们在</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">slapd.conf</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中定义了一个</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">base dn</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和一个管理员</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dn</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，所以我们需要首先把这</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">2</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dn </span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">加进来。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dn: dc=&lt;MY-DOMAIN&gt;,dc=&lt;COM&gt; <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">objectclass: dcObject <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">objectclass: organization <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">o: &lt;MY ORGANIZATION&gt; <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dc: &lt;MY-DOMAIN&gt; <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal"> <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">dn: cn=Manager,dc=&lt;MY-DOMAIN&gt;,dc=&lt;COM&gt; <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">objectclass: organizationalRole <o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">cn: Manager<o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">保存为</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">ldif</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后缀的文件。然后我们用命令把这些信息加到</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">ldap</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中去：</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<tt>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">ldapadd -x -D "cn=Manager,dc=&lt;MY-DOMAIN&gt;,dc=&lt;COM&gt;" -W -f example.ldif<o:p></o:p></span>
				</tt>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<tt>
						<span style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">让我们来查看以下我们的设置是否出现问题：<span lang="EN-US"><o:p></o:p></span></span>
				</tt>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">ldapsearch -x -b 'dc=example,dc=com' '(objectclass=*)'<o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上面的是</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">linux/unix</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的命令，</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">windows</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下我们需要做点更改：</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">ldapsearch -x -b dc=example,dc=com (objectclass=*)<o:p></o:p></span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对，就是去掉引号。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 60pt">
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了察看方便，笔者建议使用</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">GUI</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">工具来查看，比如笔者使用的</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">Softerra LDAP Browser 2.6</span>
				</em>
				<em>
						<span style="FONT-STYLE: normal; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				</em>
				<em>
						<span lang="EN-US" style="FONT-STYLE: normal">
								<o:p>
								</o:p>
						</span>
				</em>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l4 level1 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">三、</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">集成</span>
				<span lang="EN-US">
						<br />
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们的</span>
				<span lang="EN-US">ldap Server</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经搭建起来了，我们需要在我们的</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序中访问这个服务。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">Openldap.org</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">上有没有讲？有讲？下面介绍的</span>
				<span lang="EN-US">JLDAP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是干这个的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们需要看一下“</span>
				<span lang="EN-US">Java LDAP Overview</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”里面的内容。内容不是很多，但很实用。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要在</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中访问</span>
				<span lang="EN-US">ldap</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我们需要一套</span>
				<span lang="EN-US">api,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可以在下面的网站上获得：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">
						<a href="http://developer.novell.com/wiki/index.php/LDAP_Classes_for_Java">http://developer.novell.com/wiki/index.php/LDAP_Classes_for_Java</a>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在下在的文件里面有许多的例子，在</span>
				<span lang="EN-US">novell</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的网站上也有很多的例子。我就不讲了。</span>
				<span lang="EN-US">Try yourself</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/65886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-08-26 08:37 <a href="http://www.blogjava.net/huabingl/archive/2006/08/26/65886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PicoContainer源码导读</title><link>http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sun, 23 Jul 2006 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/59646.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/59646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/59646.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、简介   感谢“简易java框架”分享的学习心得。循着他的足迹，我把picocontainer读了一遍。源代码的版本是1.2-RC-2。   pico的官方站点：http://www.picocontainer.org/   由于它是一个专门的ioc容器，所以使用起来没有spring那么麻烦。关于他的文档，在官方站点上有一篇《5分钟搞定pico》的文章。国人似乎也有很多的翻译版本。讲解得很详细...&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/59646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-07-23 14:30 <a href="http://www.blogjava.net/huabingl/archive/2006/07/23/59646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 关于GWT的第一手经验</title><link>http://www.blogjava.net/huabingl/archive/2006/07/08/57250.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Sat, 08 Jul 2006 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/07/08/57250.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/57250.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/07/08/57250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/57250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/57250.html</trackback:ping><description><![CDATA[
		<p>译者安：你敢大胆采用最新的技术吗？你顾虑哪些方面？下面的采访将给我们提供一个参考。<br /> 原文：<a class="permalink" href="http://www.oreillynet.com/onjava/blog/2006/06/some_realworld_experience_with.html">Interview: Real-world Experience with Google Web Toolkit (GWT)</a><br />     在java中，对技术的采用是一件让人心烦的事情，因为我们获得通知的途径太多。不同的会议，不同的站点如slashdot和theserverside,而且还有数不清的个人博客如dhh和o'Reilly's Radar.<br />一个让人感兴趣的技术总是让业界议论纷纷，正如人们所意识到的，这个产品并不是成熟期。<br />    为了让一个产品成为主流，早期的采用者必须足够喜欢这项产品来承担很多非常的任务以便<br />让更为胆怯的开发者相信这项新技术值得采用。像Hibernate和Spring Framework这样的技术花了好几年<br />才成为一个成熟产品。许多产品，比如maven,在版本确定之前经历了痛苦的时期因为他们早期缺乏<br />足够的文档或者有不同的足够强大的挑战者比如ant.本人对这个过程中的盲点很感兴趣，从议论这个产品的介绍到大范围的采用往往要经历成月上年，而且很难指定时间表。hibernate并不是暴雨似的到来,而是通过大量用户自我采用.一个失败的项目比如ojb出来的时候也是引起轰动,但是它最终没有承诺的那么好.在这种情况下,早期的hibernate使用者其实信心不足.<br />  让我们来看Google Web Toolkit (GWT)…<br /><font color="#ff1493">GWT在这个进程中处于什么位置？</font><br />gwt看起来是在早期使用（early-adopter）的中期。一开始的议论声已经消去，现在陆续出现了许多关于gwt的文章和博客，表明了人们正在期待关于gwt的第一个helloworld的反馈报告。我的很多谨慎的同行都在回避他，事实上认为它是个不好的主意。风险阻碍了开发者对大多数新技术的评估直到他们在现实中看到了一个活生生的实例解决方案--就像maven被ibm使用一样。那些有能力来尝试风险的开发者正在对这个框架进行测试。他们中的某一个或许宣称gwt不适合它的组织。另外一个同行已经原则上接受了gwt的观点，但是没有时间来在他的应用中集成。所以，到底gwt处于什么时期？早期的使用人群有哪些经验呢？<br />   关于这个问题，我专门采访了Grassroots Technologies公司的Michael Podrazik。Grassroots Technologies是一个在纽约的咨询小组。通过在Grassroots的工作，michael已经正在把gwt应用在他们的一个新的正在开发的web应用当中。在下面的采访里面，我要求他来交流他的产品经验来帮助其他人去理解gwt.我特别要求他给一些gwt客观的意见,而且细致的描述他在用gwt开发过程中遇到的挑战。幸运的是，他的信息将会帮助你决定是否gwt是你项目的正确选择。<br /><font color="#ff1493">采访内容：</font><br />q:什么使你选择了gwt?<br />a:我订阅了google的blog,所以我听说了gwt当他发布到javaone的时候。在阅读了他的文档之后我开始对这种方式很好奇，因此我把它down了下来而且开始使用它(play with it).我刚刚开始了一个项目，这个项目是把遗留的 Access/VBA的桌面应用升级为一个web应用。在UI方面有许多ajaxian特性所以我想我可以让gwt一展身手。我认为（figure）只要我保持我的架构足够抽象，我就有能力用更为传统的web应用框架来替换gwt层。gwt会很伤脑筋吗？至少目前为止我很开心。<br />q:gwt出现了那些挑战？你围绕着gwt设计的web框架吗？gwt是否挑战了你关于web应用开发的观点？<br />a:你确实不能简单的认为gwt是一个webapp的框架，他更是一个有着rpc和对象序列化的ui类库。因为你需要改变你项目组织的assumptions以及包的结构。在java服务端开发rich-client用户界面我们有大量的经验，比如flash/actionscript.gwt和他们十分类似，因此可以想象有这些元素的项目--分隔的服务端和客户端而不是同一的webapp--很爽。<br />  朝着这个方向，你需要明确区分服务端和客户端的功能。我相信一个好的哲学就是使你的客户端仅仅用于展示。<br />  你需要思考你服务接口的设计，比如每个操作的粒度<br />  你不能在客户端代码上用java5得语法<br />Q:你的意思是不能再gwt的具体类或者普通的web应用里面用java5的语法？<br />a:你不能在客户代码里面使用java5的语法。我们在服务端代码中使用了许多java5的特性，但是所有将要被转换成javascript的代码必须是1.4的规范。<br />这个也包括许多事实上你用在服务端的类。因为rpc框架允许用户定义的数据类型的序列化，意思是你将在浏览器端得到一个已经被转化为javascript实例的类，这个类作为一个参数传递到服务端的实现中。在你的服务端代码中，你将操纵同一个class而且是编译过的字节码。<br /> 这个时候就出现了一个选择，domain module和gwt的耦合度怎样才合适呢？<br />What we decided was to keep value objects implementation-agnostic so as to avoid “infecting” the API and persistence layers with beans implementing GWT’s IsSerializable interface.<br />举个例子，在服务端我们有个IUser接口的用户模块，这个借口继承自IPersistable.gwt的实现接受和返回实现IsSerializable接口的GwtUser的实例并把这些实例利用commons-beanutils发送到服务端。<br /> 对于这一点可能有些争论，这样做并不非必要。但是我觉得这点额外的工作将带给你更为清晰的层次划分。我们可以嵌入gwt到任何一点，而且可以转换到springmvc或者struct或者其他的地方，而不需要担心代码上 的反应。<br />q:你发现gwt产生的javascript不能垮浏览器的地方了吗？你发现gwt产生的javascript包含一些错误需要手动调试了吗？<br />a:都没有，这正是令我们惊讶的地方。跨浏览器javascript的开发是PITA，而且GWT真正的把你从他那里隔离开来。<br />我发现了大量的在FIREFOX和IE不同的地方，但是这些最后被确认都是CSS支持的问题而于GWT无关。<br />我也遇到了一大队JAVASCRIPT错误，但是这些错误都是应为变量而不在初始化，这些问题很快就会找到并且不需要大量的调试。目前已经完成的大多数工作并不全是ui控件的问题，或许随着我们的深入，我们会遇到一些问题，但是目前为止，我们还没有多少麻烦。<br />q:你的工作组的成员是更喜欢java还是javascript呢？<br />显然是java,哈哈。但是我们有人对javascript和actionscript也很精通。就像译者本人。<br />q:一句话，对正在考虑gwt的人，你有什么建议？你会推荐他吗？你对这项技术的客观观点是什么？thumbs up or thumbs down?<br />a:目前是thumbs up.我们目前仍然在开发的早期，而且我还不想说在它是完美的或者在以后的进程中不会咬我们一口。意思是说，你的建构要搭好。 它真的像是在作swing或者其他UI的桌面应用。<br /> 我们用基于Controller和IView实现的GWT生成了全部的ui.除了gwt模块引入以外，那里没有html。<br />  这是对几乎所有主流web应用范例的违背，但是如果你喜欢ui编程，他完美的抽象了ajax/dhtml的行为到一个十分友好和可扩展的api.<br />  我或许会说如果你的工作是php,asp或者其他语言，你或许需要花更多的功夫。如果你已经是一个有经验的java程序员，那么你可以很快投入其中。<br /></p>
<img src ="http://www.blogjava.net/huabingl/aggbug/57250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-07-08 13:47 <a href="http://www.blogjava.net/huabingl/archive/2006/07/08/57250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j配置概要</title><link>http://www.blogjava.net/huabingl/archive/2006/07/04/56471.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Tue, 04 Jul 2006 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/07/04/56471.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/56471.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/07/04/56471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/56471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/56471.html</trackback:ping><description><![CDATA[官方网址:<br />
<a href="http://logging.apache.org/log4j/docs/index.html">http://logging.apache.org/log4j/docs/index.html</a><br />
<br />
一个中文翻译的文档:<a href="http://www.jaxwiki.org/zh/project/logging.apache.org/log4j/docs/manual.html"><br />
<br />
http://www.jaxwiki.org/zh/project/logging.apache.org/log4j/docs/manual.html</a><br />
<br />
我摘出黄色字体表明几条列在下面,也是笔者认为log4j最主要特点的浓缩:<br />
<br />
1.阶层式的命名:<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font style="background-color: #ffffff" size="2">&nbsp;<font color="#800080">如果一个logger 的名字后面跟着一个点号（dot），它就是点号（dot）后面的那个logger的前辈（ <em>ancestor</em>），是这个晚辈（<em>descendant</em>） 的前缀。如果在它自己和这个晚辈之间没有其它的前辈，它和这个晚辈之间就是<em>父</em><em>子</em>关系。</font></font></p>
2.级别继承<br />
<p><font color="#ffa500">&nbsp;&nbsp;&nbsp;</font><font style="background-color: #ffff00" color="#000000" size="2"><font style="background-color: #ffffff" color="#800080">对于一个给定的logger C，它<em>继承的级别</em>等于logger阶层里，从C开始往<code>root</code> logger上去的第一个non-null级别。</font><br />
<br />
</font></p>
<br />
3.执行规则<br />
<p>&nbsp;&nbsp;&nbsp;<font style="background-color: #ffff00" size="2"><font style="background-color: #ffffff" color="#800080">在一个级别为q（被指定的或继承的）的logger里，一个级别为p的日志请求，只有在<em>p &gt;= q</em> 时才能够被执行。</font><br />
<br />
</font></p>
4.appender添加性的规则<br />
<dd>
<p><font style="background-color: #ffff00" size="2"><font style="background-color: #ffffff" color="#800080">Logger C的log输出信息将被输出到C的所有appenders和它的前辈的 appenders。这就是"appender additivity"的意思。</font></font><font style="background-color: #ffffff" color="#800080" size="2">但是，如果logger C的前辈，比如说P，P的additivity flag被设置为 <code>false</code>，那么，C的输出信息将被输出到C的所有appenders中去，以及它的前辈的——截止在P那里，包括P在内的，appenders中去，但是不会输出到P的前辈的 appenders中去。 </font><font style="background-color: #ffffff" color="#800080" size="2">默认情况下，Loggers的additivity flag设置为<code>true</code>。</font></p>
关于日志格式:暂贴几个样例:<br />
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-c (%13F:%L) %3x - %m%n</dd>
<p>在配置文件中，log4j可以访问到系统环境变量。具体的变量参考相关资料。<br />
一篇我很早以前在csdn写的文章:<br />
<a href="http://blog.csdn.net/huabingl/archive/2005/02/19/293933.aspx">http://blog.csdn.net/huabingl/archive/2005/02/19/293933.aspx</a><br />
</p>
<img src ="http://www.blogjava.net/huabingl/aggbug/56471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-07-04 10:07 <a href="http://www.blogjava.net/huabingl/archive/2006/07/04/56471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XMLBeans</title><link>http://www.blogjava.net/huabingl/archive/2006/06/21/54215.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 21 Jun 2006 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/06/21/54215.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/54215.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/06/21/54215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/54215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/54215.html</trackback:ping><description><![CDATA[
		<!--StartFragment -->
		<span>
				<span style="FONT-FAMILY: 宋体">
						<span lang="EN-US"> XmlBeans由 BEA公司发明，后捐赠给Apache基金会的。<br /> 在项目中遇到这样的需求，根据已有的schema对xml进行格式校验，并读取出xml得数据。<br /> 在大搜一番后，我最终把目光停留在xmlbeans上面。被淘汰的是digester.<br /> 下面是一篇dev2dev得文章：<br />  <a href="http://dev2dev.bea.com/pub/a/2006/05/xmlbeans-2.html?page=4">http://dev2dev.bea.com/pub/a/2006/05/xmlbeans-2.html?page=4</a><br /> 我就不炒饭了。<br /> 好心的人给简单翻译了一下：<br /><a href="http://dev2dev.bea.com.cn/techdoc/200403127.html">http://dev2dev.bea.com.cn/techdoc/200403127.html</a><br /> 翻译得内容很少，有空本人补上。<br />ibm dw上也有个豆腐块：<br /><a href="http://www-128.ibm.com/developerworks/cn/xml/x-beans1/">http://www-128.ibm.com/developerworks/cn/xml/x-beans1/</a><br />关于digester的内容，只选了一篇文章：来自devx得<br /><a href="http://www.devx.com/Java/Article/21832/1763">http://www.devx.com/Java/Article/21832/1763</a><br /><br />关于2中方法的对比，他们的文章已经说的很详细了。<br /><br />xmlbeans采用的是sax来读取数据。2004年，由bea公司发明的stax(stream API for XML)已经被jcp列为标准jsr-173,在jdk6.0中会出现。<br />  <br />关于stax,sax和dom的对比超出本篇范围，在此略过。<br />后记:<br />  在正在完成的项目中,我采用了xmlbeans,它的引入给我带来了很大的方便.</span>
				</span>
		</span>
<img src ="http://www.blogjava.net/huabingl/aggbug/54215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-06-21 13:50 <a href="http://www.blogjava.net/huabingl/archive/2006/06/21/54215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commons Configuration</title><link>http://www.blogjava.net/huabingl/archive/2006/05/31/49191.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 31 May 2006 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/05/31/49191.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/49191.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/05/31/49191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/49191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/49191.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Configuration				简介				 Configuration 				的参数可能来自下面的资源：										    *  Properties files    * XML documents    * Property list files (.plist)    * JNDI    * JDBC Datasource    * System prope...&nbsp;&nbsp;<a href='http://www.blogjava.net/huabingl/archive/2006/05/31/49191.html'>阅读全文</a><img src ="http://www.blogjava.net/huabingl/aggbug/49191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-05-31 10:30 <a href="http://www.blogjava.net/huabingl/archive/2006/05/31/49191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>proxool</title><link>http://www.blogjava.net/huabingl/archive/2006/05/24/47900.html</link><dc:creator>binge</dc:creator><author>binge</author><pubDate>Wed, 24 May 2006 14:19:00 GMT</pubDate><guid>http://www.blogjava.net/huabingl/archive/2006/05/24/47900.html</guid><wfw:comment>http://www.blogjava.net/huabingl/comments/47900.html</wfw:comment><comments>http://www.blogjava.net/huabingl/archive/2006/05/24/47900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/huabingl/comments/commentRss/47900.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/huabingl/services/trackbacks/47900.html</trackback:ping><description><![CDATA[官方网址:<a href="http://proxool.sourceforge.net/"><br />http://proxool.sourceforge.net/</a><br /><br /> <font color="#ff1493">Setting up Proxool in a Servlet environment</font>(在servlet环境中使用proxool)<br /><font color="#ff1493">   </font><font color="#ee82ee">Configuration(配置)<br /></font>   有3种方式来配置proxool：<br />      1. XML file。<br />      代理到 JAXPConfigurator来处理xml文件。如果文件不是绝对路径，将会定位到应用的根目录。<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;org.logicalcobwebs.proxool.configuration.ServletConfigurator&lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;xmlFile&lt;/param-name&gt;<br />    &lt;param-value&gt;WEB-INF/proxool.xml&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt; <br />   2. Property file。<br /> 代理到PropertyConfigurator去解析。如果文件不是绝对路径，将会定位到应用的根目录。<br />   &lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;org.logicalcobwebs.proxool.configuration.ServletConfigurator&lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />    &lt;param-value&gt;WEB-INF/proxool.properties&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt; <br />3. Init parameters。<br />   代理到PropertyConfigurator去解析。根据servlet的初始化参数创建一个Property对象。<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;org.logicalcobwebs.proxool.configuration.ServletConfigurator&lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;jdbc-0.proxool.alias&lt;/param-name&gt;<br />    &lt;param-value&gt;test&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;jdbc-0.proxool.driver-url&lt;/param-name&gt;<br />    &lt;param-value&gt;jdbc:hsqldb:.&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;jdbc-0.proxool.driver-class&lt;/param-name&gt;<br />    &lt;param-value&gt;org.hsqldb.jdbcDriver&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt; <br />在刈除所有的连接池后，ServletConfigurator会自动停止。<br /> &lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;org.logicalcobwebs.proxool.configuration.ServletConfigurator&lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />    &lt;param-name&gt;autoShutdown&lt;/param-name&gt;<br />    &lt;param-value&gt;false&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt; <br /><font color="#ee82ee">Installation.（安装）</font><br />   如果在你的servlet环境中有多个web应用，你需要考虑如何来安装proxool.这里有2种方案：<br />   1。在你应用的库目录（web-info/lib）,他的理论如下：<br />   proxool将不会再web应用间共享。如果你重新装在web应用，一个新的实例将会产生。除非你显式关闭旧的proxool，否则他将继续使用各种资源（本地资源和数据库）。你可以用如下的办法来关闭他们：用上面提到的ServletConfigurator或者调用ProxoolFacade的shutdown方法。<br />   2。在容器的公用目录下或者classpath中，他的理论如下：<br />   你可以在多个web应用中共享proxool,这样的话，如果你重新装在单个的web应用，proxool依然在运行。如果你想冲起proxool,要么重起容器，要么全部应用停止并重新配置proxool.<br />----------------------<br />本人在CSDN上的部分翻译:<br /><a href="http://blog.csdn.net/huabingl/archive/2006/05/11/725155.aspx">http://blog.csdn.net/huabingl/archive/2006/05/11/725155.aspx</a><img src ="http://www.blogjava.net/huabingl/aggbug/47900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/huabingl/" target="_blank">binge</a> 2006-05-24 22:19 <a href="http://www.blogjava.net/huabingl/archive/2006/05/24/47900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>