﻿<?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/nikon/</link><description>一个软件分析师的博客</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:00:12 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:00:12 GMT</pubDate><ttl>60</ttl><item><title>XFIRE的一个例子，发现左web service真是简单得要命！！ 侧面印证了写代码越来越没前途了，哈</title><link>http://www.blogjava.net/nikon/archive/2007/12/29/171540.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Sat, 29 Dec 2007 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/12/29/171540.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/171540.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/12/29/171540.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/171540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/171540.html</trackback:ping><description><![CDATA[<p>接口 interface<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.Collection;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.List;</p>
<p>public interface IMathService {<br />
&nbsp;/**<br />
&nbsp; * 加<br />
&nbsp; * @param a<br />
&nbsp; * @param b<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public int add(int a,int b);<br />
&nbsp;/**<br />
&nbsp; * 减<br />
&nbsp; * @param a<br />
&nbsp; * @param b<br />
&nbsp; * @return<br />
&nbsp; */<br />
&nbsp;public int sub(int a,int b);<br />
/**<br />
上传二进制文件<br />
*/<br />
&nbsp;&nbsp;public String sendFile(String fileName,byte[] file );<br />
&nbsp;<br />
}<br />
<br />
实现 implements<br />
<br />
</p>
<p>import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.io.File;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.io.FileOutputStream;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.sql.Connection;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.sql.ResultSet;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.sql.Statement;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.ArrayList;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.Collection;<br />
import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.List;</p>
<p>import com.newsoft.oa.bean.User;<br />
import com.newsoft.oa.uitl.Connector;<br />
import com.thoughtworks.xstream.XStream;</p>
<p>public class MathServiceImpl implements IMathService{<br />
&nbsp; public int add(int a,int b){<br />
&nbsp;&nbsp; return a+b;<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; public int sub(int a,int b){<br />
&nbsp;&nbsp; return a-b;<br />
&nbsp; } <br />
&nbsp; public String getWelComeStr(String name){<br />
&nbsp;&nbsp; return "hi "+name+"! 欢迎你";<br />
&nbsp; }<br />
&nbsp; public List getUsers(){<br />
&nbsp;&nbsp; List l=new ArrayList();<br />
&nbsp;&nbsp; l.add("name");<br />
&nbsp;&nbsp; l.add("password");<br />
&nbsp;&nbsp; l.add("sex");<br />
&nbsp;&nbsp; return l;<br />
&nbsp; }</p>
<p>public String sendFile(String fileName, byte[] filebytes) {<br />
&nbsp;try{<br />
&nbsp;&nbsp;String path="";<br />
&nbsp;&nbsp; if(filebytes!=null&amp;&amp;filebytes.length&gt;0){<br />
&nbsp;&nbsp;&nbsp; File file=new File("/"+fileName);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; file.createNewFile();<br />
&nbsp;&nbsp;&nbsp; FileOutputStream fos=new&nbsp;FileOutputStream(file);<br />
&nbsp;&nbsp;&nbsp; fos.write(filebytes);<br />
&nbsp;&nbsp;&nbsp; fos.close();<br />
&nbsp;&nbsp;&nbsp; path=file.getAbsolutePath();<br />
&nbsp;&nbsp;&nbsp; System.out.println(path);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; file=null;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; return path;<br />
&nbsp;}catch(Exception ex){<br />
&nbsp;&nbsp;return "false";<br />
&nbsp;}<br />
}<br />
</p>
<p>}<br />
<br />
配置文件 <br />
<br />
放在 Classes/META-INF/xfire/service.xml；里面<br />
<br />
</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;beans xmlns="http://xfire.codehaus.org/config/1.0"&gt;<br />
&nbsp;&lt;service&gt;<br />
&nbsp;&nbsp;&lt;name&gt;MathService&lt;/name&gt;<br />
&nbsp;&nbsp;&lt;namespace&gt;newsoft/oa/MathService&lt;/namespace&gt;<br />
&nbsp;&nbsp;&lt;serviceClass&gt;<br />
&nbsp;&nbsp;&nbsp;com.newsoft.oa.services.IMathService<br />
&nbsp;&nbsp;&lt;/serviceClass&gt;<br />
&nbsp;&nbsp;&lt;implementationClass&gt;<br />
&nbsp;&nbsp;&nbsp;com.newsoft.oa.services.MathServiceImpl<br />
&nbsp;&nbsp;&lt;/implementationClass&gt;</p>
<p>&nbsp;&lt;/service&gt;<br />
&lt;/beans&gt;</p>
<p>其实是借鉴了Spring的写法，用过Spring不会对着陌生，（Application-context.xml）<br />
<br />
WEB-XML加上<br />
<br />
</p>
<p>&lt;servlet&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;org.codehaus.xfire.transport.http.XFireConfigurableServlet<br />
&nbsp;&nbsp;&lt;/servlet-class&gt;<br />
&nbsp;&lt;/servlet&gt;</p>
<p>&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;/servlet/XFireServlet/*&lt;/url-pattern&gt;<br />
&nbsp;&lt;/servlet-mapping&gt;</p>
<p>&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;<br />
&nbsp;&lt;/servlet-mapping&gt;</p>
<br />
最后就是客户端了 <br />
<br />
/&nbsp;/Create a metadata of the service&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;Service serviceModel = new ObjectServiceFactory().create(IMathService.class); <br />
//&nbsp;Create a proxy for the deployed service&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());&nbsp;&nbsp; <br />
&nbsp;String serviceUrl = "http://localhost:8080/ws/services/MathService";<br />
&nbsp; client = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;try {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; client = (IMathService) factory.create(serviceModel, serviceUrl);&nbsp; <br />
&nbsp;&nbsp; File file=new File("c:\\SUPERMAP 白皮书.pdf");<br />
&nbsp;&nbsp; FileInputStream fis=new FileInputStream(file);<br />
&nbsp;&nbsp; byte[] b=new byte[fis.available()];<br />
&nbsp;&nbsp; fis.read(b);<br />
&nbsp;&nbsp;System.out.println(client.sendFile(file.getName(), b));<br />
&nbsp;} catch (Exception ex) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Invoke the service&nbsp;&nbsp;&nbsp; <br />
&nbsp;int serviceResponse = 0;<br />
&nbsp;int a=10,b=20;<br />
<br />
就是 <br />
<br />
<span style="color: red">Service serviceModel = new ObjectServiceFactory().create(IMathService.class);&nbsp;<br />
&nbsp;XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());&nbsp;&nbsp; <br />
&nbsp;String serviceUrl = <a href="http://localhost:8080/ws/services/MathService">http://localhost:8080/ws/services/MathService</a>;<br />
</span><br />
三行字建立连接请求，<br />
<br />
太轻松了<br />
<br />
传输文件速度也可以，二进制，2M多的文件，也能轻松传递<br />
<br />
用.net和delphi平台测试，兼容性没问题（按道理 soap,也不应该有问题）<br />
<br />
这是为客户搭建的在 档案系统和OA审批间作文件归档的尝试项目<br />
<br />
哈，完整的项目代码，就不方便讲了。<br /><img src ="http://www.blogjava.net/nikon/aggbug/171540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-12-29 14:59 <a href="http://www.blogjava.net/nikon/archive/2007/12/29/171540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 DOMINO LS里面 view的Ftsearch的 "entry is no longer in view"的研究</title><link>http://www.blogjava.net/nikon/archive/2007/12/29/171527.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Sat, 29 Dec 2007 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/12/29/171527.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/171527.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/12/29/171527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/171527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/171527.html</trackback:ping><description><![CDATA[1：<br />
原因主要是 数据的不唯一性<br />
<br />
domino文档数据库的弊病<br />
<br />
而且 FTSearch查询起来也不很准确，三字符一下查询，命中率不是十分高，大约 80%-95%<br />
<br />
2：<br />
entry is no longer in view错误的避免方法是<br />
<br />
用NotesViewEntry.IsValid方法先判断那 Entry是否能调用<br />
<br />
如果不是调用里面很多方法 都会报&nbsp;&nbsp;entry is no longer in view，就算 IsDocument也没用处<br />
<br />
但这样，如果是自己手动分页，就会出现 GetNthEntry时候不太准确<br />
<br />
但没办法了，两者弊，取其轻<br />
<br />
主要是客户体验受点影响了<br />
<br /><img src ="http://www.blogjava.net/nikon/aggbug/171527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-12-29 14:40 <a href="http://www.blogjava.net/nikon/archive/2007/12/29/171527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>近期负责公司的OA改造，接触了ext-js框架，自己动手写了些代码，最有成就感的是 extnd里分页的修改，一下是部分修改心得</title><link>http://www.blogjava.net/nikon/archive/2007/12/29/171521.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Sat, 29 Dec 2007 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/12/29/171521.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/171521.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/12/29/171521.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/171521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/171521.html</trackback:ping><description><![CDATA[<p style="color: red">一：<br />
<br />
<span style="color: #000000">分页要自己重写：在 extnd-all-debug重写拿取数据部分<br />
</p>
<p>//自己重写分页拿数据的方法，这样数据行数会正确现实<br />
&nbsp; var ds = new Ext.nd.data.DominoViewStore({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy: new Ext.data.HttpProxy({<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url: Ext.nd.extndUrl+'GetView?OpenAgent',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method: "GET"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baseParams: {db: "/"+Ext.nd.Session.CurrentDatabase.FilePath, vw: this.viewName },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reader: viewEntryReader,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; remoteSort: true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>。。。。。。。。。。。。。。。<br />
<br />
getView的ls代理如下<br />
<br />
</p>
<p>'GetView: </p>
<p>Option Public<br />
Option Explicit</p>
<p><br />
Sub Initialize<br />
%REM<br />
This agent can be called from the web to search any view and return results in the<br />
same format as the ?ReadViewEntries command. This was created for use with the <br />
NotesView2 class v1.3 and above.<br />
%END REM<br />
&nbsp;<br />
&nbsp;On Error Goto ErrorHandler<br />
&nbsp;<br />
&nbsp;Dim session As New NotesSession<br />
&nbsp;Dim dbSearch As NotesDatabase<br />
&nbsp;Dim colEntries As NotesViewEntryCollection<br />
&nbsp;Dim vwSearch As NotesView<br />
&nbsp;Dim entryResult As NotesViewEntry<br />
&nbsp;Dim docCurrent As NotesDocument<br />
&nbsp;Dim docResult As NotesDocument<br />
&nbsp;Dim col As NotesViewColumn<br />
&nbsp;Dim strQuery As String<br />
&nbsp;Dim strDb As String<br />
&nbsp;Dim strView As String<br />
&nbsp;Dim strCategory As String<br />
&nbsp;Dim intMax As Integer<br />
&nbsp;Dim lngCount As Long, i As Long<br />
&nbsp;Dim lngStart As Long, lngEnd As Long<br />
&nbsp;Dim strParameters As String<br />
&nbsp;Dim lngResults As Long<br />
&nbsp;Dim x,n As Integer<br />
&nbsp;Dim xmlStr,resortdescending ,resortascending As String<br />
&nbsp;Dim nav As NotesViewNavigator<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;'start the xml document<br />
&nbsp;Print "Content-Type:text/xml;"<br />
&nbsp;Print "&lt;?xml version=""1.0"" encoding=""gb2312""?&gt;"<br />
&nbsp;<br />
&nbsp;'first we get the search parameters out of the querystring<br />
&nbsp;'db, vw, query, searchmax, count, and start<br />
&nbsp;Set docCurrent = session.DocumentContext<br />
&nbsp;<br />
&nbsp;strParameters = docCurrent.GetItemValue("Query_String")(0)<br />
&nbsp;'Msgbox strParameters<br />
&nbsp;strDb = GetParameter("db",strParameters)<br />
&nbsp;strDb = Replace(Strright(strDb,"/"),"/","\")<br />
&nbsp;strView = GetParameter("vw",strParameters)<br />
&nbsp;strQuery = GetParameter("query",strParameters)<br />
&nbsp;strCategory= GetParameter("RestrictToCategory",strParameters)<br />
&nbsp;resortdescending=GetParameter("resortdescending",strParameters)<br />
&nbsp;resortascending=GetParameter("resortascending",strParameters)<br />
&nbsp;<br />
&nbsp;intMax = 0<br />
&nbsp;If Isnumeric(GetParameter("searchmax",strParameters)) Then intMax = Cint(GetParameter("searchmax",strParameters))<br />
&nbsp;lngCount = 20<br />
&nbsp;If Isnumeric(GetParameter("count",strParameters)) Then lngCount = Clng(GetParameter("count",strParameters))<br />
&nbsp;lngStart = 1<br />
&nbsp;If Isnumeric(GetParameter("start",strParameters)) Then lngStart = Clng(GetParameter("start",strParameters))<br />
&nbsp;<br />
&nbsp;'now we get the view to search<br />
&nbsp;Set dbSearch = session.GetDatabase("",strDb,False)<br />
&nbsp;Set vwSearch = dbSearch.GetView(strView)<br />
&nbsp;<br />
&nbsp;'Msgbox resortdescending +" &amp;&amp; "+resortascending<br />
&nbsp;<br />
&nbsp;'now we run the search<br />
&nbsp;If&nbsp;&nbsp; strCategory="" Then<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;Set colEntries = vwSearch.AllEntries&nbsp;<br />
&nbsp;Else<br />
&nbsp;&nbsp;Set colEntries = vwSearch.GetAllEntriesByKey(strCategory)<br />
&nbsp;End If&nbsp;<br />
&nbsp;<br />
&nbsp;lngResults=colEntries.Count<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;'now we spit out the results<br />
&nbsp;Print "&lt;viewentries toplevelentries=""" &amp; Cstr(lngResults) &amp; """&gt;"<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;'set the starting point for the loop<br />
&nbsp;If lngStart &gt; lngResults Then lngStart = lngResults<br />
&nbsp;<br />
&nbsp;'set the ending point for the loop<br />
&nbsp;lngEnd = lngStart + lngCount - 1<br />
&nbsp;If lngEnd &gt; lngResults Then lngEnd = lngResults<br />
&nbsp;'now loop through the appropriate subset of results and print out a viewentry tag for each one<br />
&nbsp;i = lngStart<br />
&nbsp;While i &lt;= lngEnd<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;If i = lngStart Then <br />
&nbsp;&nbsp;&nbsp;Set entryResult = colEntries.GetNthEntry(i)&nbsp;<br />
&nbsp;&nbsp;Else <br />
&nbsp;&nbsp;&nbsp;Set entryResult = colEntries.GetNextEntry(entryResult)<br />
&nbsp;&nbsp;End If<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;If Not entryResult Is Nothing&nbsp;&nbsp; Then<br />
&nbsp;&nbsp;'If Not entryResult Is Nothing And entryResult.IsValid&nbsp; Then<br />
&nbsp;&nbsp;&nbsp;'If entryResult.IsDocument Then<br />
&nbsp;&nbsp;&nbsp;Set docResult = entryResult.Document<br />
&nbsp;&nbsp;&nbsp;Print&nbsp; "&lt;viewentry position=""" &amp; Cstr(i) &amp; """ unid=""" &amp; Cstr(docResult.universalID) &amp; """ noteid=""" &amp; Cstr(docResult.NoteID) &amp; """ siblings=""" &amp; Cstr(entryResult.SiblingCount) &amp; """&gt;"<br />
&nbsp;&nbsp;&nbsp;x = 0 <br />
&nbsp;&nbsp;&nbsp;n=0<br />
&nbsp;&nbsp;&nbsp;Forall value In entryResult.ColumnValues<br />
&nbsp;&nbsp;&nbsp;&nbsp;Set col=vwSearch.Columns(x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;If Not col.isCategory And&nbsp; Not col.IsHidden&nbsp; Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print "&lt;entrydata columnnumber=""" &amp; Cstr(n) &amp; """ name=""" &amp; col.itemName &amp; """&gt;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print&nbsp; "&lt;text&gt;" &amp; XMLEscape(GetValue(value,Cstr(docResult.universalID))) &amp; "&lt;/text&gt;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print&nbsp; "&lt;/entrydata&gt;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n=n+1<br />
&nbsp;&nbsp;&nbsp;&nbsp;End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;x = x + 1<br />
&nbsp;&nbsp;&nbsp;End Forall<br />
&nbsp;&nbsp;&nbsp;Print "&lt;/viewentry&gt;"<br />
&nbsp;&nbsp;&nbsp;'End If<br />
&nbsp;&nbsp;End If<br />
&nbsp;&nbsp;i = i + 1<br />
&nbsp;Wend<br />
AtEnd:<br />
&nbsp;Print "&lt;/viewentries&gt;"<br />
&nbsp;<br />
&nbsp;''''Msgbox xmlStr<br />
&nbsp;Print xmlStr<br />
&nbsp;vwSearch.Clear<br />
&nbsp;Set dbSearch=Nothing<br />
&nbsp;Set vwSearch=Nothing<br />
&nbsp;Exit Sub<br />
ErrorHandler:<br />
&nbsp;Msgbox "&lt;error&gt;" &amp; "Error in ($Ext.nd.SearchView): " &amp; Error &amp; "---at " &amp; Erl &amp; "&lt;/error&gt;"<br />
&nbsp;Print "&lt;error&gt;" &amp; "Error in ($Ext.nd.SearchView): " &amp; Error &amp; "---at " &amp; Erl &amp; "&lt;/error&gt;" <br />
&nbsp;Resume AtEnd<br />
End Sub<br />
Function GetParameter(strParamName As String, strQuery As String) As String<br />
&nbsp;'this gets a parameter out of a querystring<br />
&nbsp;Dim i As Integer<br />
&nbsp;Dim s As String<br />
&nbsp;Dim v As Variant<br />
&nbsp;<br />
&nbsp;GetParameter = ""<br />
&nbsp;<br />
&nbsp;i = Instr(Ucase(strQuery),"&amp;" &amp; Ucase(strParamName) &amp; "=")<br />
&nbsp;If i &lt;&gt; 0 Then<br />
&nbsp;&nbsp;s = Strright(Mid(strQuery, i),"=")<br />
&nbsp;&nbsp;If Instr(s, "&amp;") Then<br />
&nbsp;&nbsp;&nbsp;s = Strleft(s, "&amp;")<br />
&nbsp;&nbsp;End If<br />
&nbsp;&nbsp;v = Evaluate("@UrlDecode(""Domino""; """ &amp; s &amp; """)")<br />
&nbsp;&nbsp;GetParameter = Cstr(v(0))<br />
&nbsp;End If<br />
End Function<br />
Function XMLEscape(strValue As String) As String<br />
&nbsp;'this escapes a string so it can be printed out to xml safely<br />
&nbsp;strValue = Replace(strValue, "&amp;" , "&amp;amp;")<br />
&nbsp;strValue = Replace(strValue, "&lt;" , "&amp;lt;")<br />
&nbsp;strValue = Replace(strValue, "&gt;" , "&amp;gt;")<br />
&nbsp;XMLEscape = strValue<br />
End Function</p>
<p><br />
Function GetValue(strValue As Variant,id As String) As String<br />
&nbsp;On Error Goto sErr<br />
&nbsp;<br />
&nbsp;'Forall vs In strValue<br />
&nbsp;'&nbsp;Msgbox "vs=" &amp;&nbsp; Cstr(vs)<br />
&nbsp;'End Forall<br />
&nbsp;GetValue=Cstr(strValue)<br />
&nbsp;Exit Function<br />
sErr:<br />
&nbsp;GetValue="文档" &amp; id<br />
&nbsp;Exit Function<br />
End Function</p>
<p>&nbsp;</p>
<p>有兴趣可以研究下 ext-js的AJAX框架，确实很有趣<br />
</p>
</span><img src ="http://www.blogjava.net/nikon/aggbug/171521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-12-29 14:32 <a href="http://www.blogjava.net/nikon/archive/2007/12/29/171521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA的对LDAP操作代码（以DOMINO为例子）</title><link>http://www.blogjava.net/nikon/archive/2007/04/10/109624.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Tue, 10 Apr 2007 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/04/10/109624.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/109624.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/04/10/109624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/109624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/109624.html</trackback:ping><description><![CDATA[<p><span style="COLOR: red">LdapConnector&nbsp; 连接类</span><br><br>import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.Hashtable;</p>
<p>import javax.naming.Context;<br>import javax.naming.directory.DirContext;<br>import javax.naming.directory.InitialDirContext;<br>import javax.naming.directory.SearchControls;</p>
<p>public class LdapConnector {<br>&nbsp;public final static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";<br>&nbsp;public final static String HOST_URL = "<a href="ldap://128.8.1.8:389/">ldap://128.8.1.8:389</a>";<br>&nbsp;&nbsp;&nbsp; public static LdapConnector connector=null;<br>&nbsp;<br>&nbsp;private DirContext ctx;</p>
<p>&nbsp;private Hashtable&lt;String,String&gt; env;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;public LdapConnector(String principal, String credentials) {<br>&nbsp;&nbsp;env = new Hashtable();<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);<br>&nbsp;&nbsp;&nbsp;env.put(Context.PROVIDER_URL, HOST_URL);<br>&nbsp;&nbsp;&nbsp;env.put(Context.SECURITY_AUTHENTICATION, "simple");<br>&nbsp;&nbsp;&nbsp;env.put(Context.SECURITY_PRINCIPAL, principal);<br>&nbsp;&nbsp;&nbsp;env.put(Context.SECURITY_CREDENTIALS, credentials);<br>&nbsp;&nbsp;&nbsp;ctx = new InitialDirContext(env);<br>&nbsp;&nbsp;} catch (Exception ex) {<br>&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public&nbsp; DirContext getDirContext(){<br>&nbsp;&nbsp;return ctx;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public static SearchControls getSearchControls(){<br>&nbsp;&nbsp;SearchControls constraints;<br>&nbsp;&nbsp;constraints = new SearchControls();<br>&nbsp;&nbsp;constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);<br>&nbsp;&nbsp;return constraints;<br>&nbsp;}<br>&nbsp;<br>&nbsp;<br>&nbsp;public static LdapConnector&nbsp; init(){<br>&nbsp;&nbsp;&nbsp;&nbsp; synchronized (LdapConnector.class) {<br>&nbsp;&nbsp;&nbsp; &nbsp; if(connector==null)<br>&nbsp;&nbsp;&nbsp;&nbsp;connector=new LdapConnector("lilb","1");&nbsp;<br>&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp; return connector;<br>&nbsp;}<br>}<br><br>测试类：<br><br>import <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.ArrayList;</p>
<p>import javax.naming.NamingEnumeration;<br>import javax.naming.directory.Attribute;<br>import javax.naming.directory.Attributes;<br>import javax.naming.directory.DirContext;<br>import javax.naming.directory.SearchResult;<br><br>public class LdapText {</p>
<p>&nbsp;/**<br>&nbsp; * @param args<br>&nbsp; */<br>&nbsp;public static void main(String[] args) throws Exception{<br>&nbsp;&nbsp;// TODO Auto-generated method stub<br>&nbsp;&nbsp;String cn="";<br>&nbsp;&nbsp;String dn="";<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;String filter="";<br>&nbsp;&nbsp;String searchBase="";<br>&nbsp;&nbsp;NamingEnumeration&lt;SearchResult&gt; results;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br><br><span style="COLOR: #0000ff">DirContext ctx =LdapConnector.init().getDirContext();</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //先拿CN值 ================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searchBase="";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filter ="(uid=lilb)";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; results =<br>&nbsp;&nbsp;&nbsp;ctx.search(searchBase, filter, LdapConnector.getSearchControls());<br>&nbsp;&nbsp;while (results != null &amp;&amp; results.hasMore()) {<br>&nbsp;&nbsp;&nbsp;SearchResult sr2 =&nbsp; results.next();<br>&nbsp;&nbsp;&nbsp;cn=(String)sr2.getAttributes().get("cn").get();<br>&nbsp;&nbsp;&nbsp;dn=sr2.getName();<br>&nbsp;&nbsp;&nbsp;System.out.println(dn);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=======================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a title="" href="www.csdn.org" >J2EE技术的爬虫</a>.util.List&lt;String&gt; uidList=new ArrayList&lt;String&gt;();<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filter =<br>&nbsp;&nbsp;&nbsp;"(&amp;(objectClass=dominoGroup)(cn=IT事业部))";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; results =<br>&nbsp;&nbsp;&nbsp;ctx.search(searchBase, filter, LdapConnector.getSearchControls());<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;while (results != null &amp;&amp; results.hasMore()) {<br>&nbsp;&nbsp;&nbsp;SearchResult sr =&nbsp; results.next();<br>&nbsp;&nbsp;&nbsp;System.out.println(sr.getName());<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;Attributes attrs = sr.getAttributes();<br>&nbsp;&nbsp;&nbsp;NamingEnumeration attrsEnum=attrs.get("member").getAll();<br>&nbsp;&nbsp;&nbsp;System.out.println("组织里的人员有 ："+attrs.get("member"));<br>&nbsp;&nbsp;&nbsp;while (attrsEnum != null &amp;&amp; attrsEnum.hasMore()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;String str=(String)attrsEnum.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(str.equalsIgnoreCase(dn));<br>&nbsp;&nbsp;&nbsp;&nbsp;NamingEnumeration&lt;SearchResult&gt; resultsPerson =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.search(str, "(objectClass=*)", LdapConnector.getSearchControls());//根据DN，再重新查找<br>&nbsp;&nbsp;&nbsp;&nbsp;while (resultsPerson != null &amp;&amp; resultsPerson.hasMore()) {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SearchResult srPerson =&nbsp; resultsPerson.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(srPerson.getAttributes().get("cn").get());//里面人的CN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(srPerson.getAttributes().get("uid").get()+"@");//里面人的UID<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uidList.add(srPerson.getAttributes().get("uid").get().toString().toLowerCase());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;System.out.println("本组织是否存在这用户 :"+uidList.contains("lilb"));<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;}<br>&nbsp;}<br><br>}</p><img src ="http://www.blogjava.net/nikon/aggbug/109624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-04-10 14:21 <a href="http://www.blogjava.net/nikon/archive/2007/04/10/109624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我心目中中国队的理想阵容 </title><link>http://www.blogjava.net/nikon/archive/2007/04/10/109620.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Tue, 10 Apr 2007 06:14:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/04/10/109620.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/109620.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/04/10/109620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/109620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/109620.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我心目中的理想阵容&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp; 于大宝（韩鹏）</p>
<p>于海&nbsp;&nbsp; 郑智&nbsp;&nbsp; 董方卓<br>&nbsp;&nbsp;&nbsp; 邵佳一&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 周海宾&nbsp;&nbsp; <br>孙详 李伟峰 冯萧庭 孙继海</p>
<br><br>前提试换了鬼老教练<img src ="http://www.blogjava.net/nikon/aggbug/109620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-04-10 14:14 <a href="http://www.blogjava.net/nikon/archive/2007/04/10/109620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国奥队又打架了</title><link>http://www.blogjava.net/nikon/archive/2007/02/09/98960.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Fri, 09 Feb 2007 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/02/09/98960.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/98960.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/02/09/98960.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/98960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/98960.html</trackback:ping><description><![CDATA[<p>       又一中国球员没脑袋,没思维,没智慧的佐证<br />我整天对中国球员的想法就是<br /><br />技术没问题<br /><br />身体没问题<br /><br />速度没问题<br /><br />就是脑袋有问题<br /><br />讲了不学,学了不做,做了又做不好<br /><br />很简单的战术,分边,ONE TWO ,假动作,总是失误,怪谁呢<br /><br />中国的教练不是没知识,但是是不会教<br /><br />道理就象一个好的技术人员未必是一个好的老师一样<br /><br />侯捷老师为何出名,不是因为他的技术(我没贬低他技术的意思),是因为他能把他懂的技术说清楚<br /><br />加上中国人脑袋思维特别复杂,所以球员战术素养极其底下<br /><br />哎,没救的中国足球<br /><br />但为何我还是爱看?<br /><br />看来我也是没救了<br /></p><img src ="http://www.blogjava.net/nikon/aggbug/98960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-02-09 11:40 <a href="http://www.blogjava.net/nikon/archive/2007/02/09/98960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个yale-cas实现单点登录(OSS)的简单例子实现 </title><link>http://www.blogjava.net/nikon/archive/2007/01/31/96854.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Wed, 31 Jan 2007 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/01/31/96854.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/96854.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/01/31/96854.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/96854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/96854.html</trackback:ping><description><![CDATA[
		<p>
				<br />Tomcat5.5.9 <br />Jdk 1.5.0.1<br />按照如下的配置成功：<br />1首先我打开tomcat5.5的SSL<br />修改Tomcat配置文件server.xml，去掉对于SSL的注释，即开放8443端口<br />（注意：不用添加任何东西）<br />2.生成安全证书<br />首先在命令行中切换到 %java_home%\jre\lib\security目录<br />%java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA<br />密码是:changeit<br />姓名是:localhost<br />其他随便写的<br />之后是<br />%java_home%\bin\keytool -export -alias tomcat -file server.crt<br />和<br />%java_home%\bin\keytool -import -file server.crt -keystore %java_home%/jre/lib/security/cacerts <br />3.将CAS server3.0.2中target目录中的CAS.war复制到%tomcat_home%\webapps目录下.<br />（或者\cas-server-2.0.12\lib目录中的CAS.war也可以）<br />4.将cas-client-2.0.11\java\lib文件复制到%tomcat_home%\webapps\servlets-examples\WEB-INF\lib中(没有lib文件夹，自己建一个)<br />5.修改tomcat自带的servlet-examples的web.xml, 加入cas的过滤器:</p>
		<p>&lt;filter&gt; <br />    &lt;filter-name&gt;CASFilter&lt;/filter-name&gt;<br />    &lt;filter-class&gt;edu.yale.its.tp.cas.client.filter.CASFilter&lt;/filter-class&gt;<br />    &lt;init-param&gt;<br />        &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.loginUrl&lt;/param-name&gt;<br />        &lt;param-value&gt;<a class="contentlink" href="https://localhost:8443/cas/login&lt;/param-value&gt;" target="_blank"><font color="#4455aa">https://localhost:8443/cas/login&lt;/param-value&gt;</font></a><br />    &lt;/init-param&gt;<br />    &lt;init-param&gt;<br />        &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.validateUrl&lt;/param-name&gt;<br />        &lt;param-value&gt;<a class="contentlink" href="https://localhost:8443/cas/proxyValidate&lt;/param-value&gt;" target="_blank"><font color="#4455aa">https://localhost:8443/cas/proxyValidate&lt;/param-value&gt;</font></a><br />    &lt;/init-param&gt;<br />    &lt;init-param&gt;<br />        &lt;param-name&gt;edu.yale.its.tp.cas.client.filter.serverName&lt;/param-name&gt;<br />        &lt;param-value&gt;localhost:8080&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />    &lt;filter-name&gt;CASFilter&lt;/filter-name&gt;<br />    &lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />6.启动tomcat !,CAS.war文件被自动在webapps下释放出CAS目录<br />进入<a class="contentlink" href="http://localhost:8080/servlets-examples" target="_blank"><font color="#4455aa">http://localhost:8080/servlets-examples</font></a>,随便点击一个Execute,系统 被自动转发到CAS的登陆页面.<br />输入相同的用户名和密码，之后跳转回原来页面<br />注意：<br />在制作一个自签名的credential了, 在生成keystore文件的时候密码是:changeit(这是tomcat默认的),你的名字一定要是:localhost,当然这是你需要把CAS client和CAS server放在同一台机器上进行测试用的.</p>
<img src ="http://www.blogjava.net/nikon/aggbug/96854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-01-31 10:23 <a href="http://www.blogjava.net/nikon/archive/2007/01/31/96854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诗一首,曾国藩赠与其弟所书</title><link>http://www.blogjava.net/nikon/archive/2007/01/25/96007.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Thu, 25 Jan 2007 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/01/25/96007.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/96007.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/01/25/96007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/96007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/96007.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">左列钟铭右谤书</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">人间随处有乘除</span>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Tahoma" xml:lang="EN-US">
						<br />
				</span>
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">低头一拜屠羊说</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">万事浮云过太虚<br /><br /><a href="http://googlechinablog.com/2006/08/google.html">http://googlechinablog.com/2006/08/google.html</a><br /><br /></span>
		</p>
<img src ="http://www.blogjava.net/nikon/aggbug/96007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-01-25 17:21 <a href="http://www.blogjava.net/nikon/archive/2007/01/25/96007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING + HIBERNATE +OSWORKFLOW  的配置文件(2)</title><link>http://www.blogjava.net/nikon/archive/2007/01/25/95977.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Thu, 25 Jan 2007 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/01/25/95977.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/95977.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/01/25/95977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/95977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/95977.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#ff0033">applicationContext-hibernate.xml</font>
				<br />=============================<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;<br />&lt;beans&gt;<br /> &lt;bean id="sessionFactory"<br />  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />  &lt;property name="configLocation"&gt; <br />   &lt;value&gt;classpath:hibernate.cfg.xml&lt;/value&gt; <br />  &lt;/property&gt; <br /> &lt;/bean&gt;<br />&lt;/beans&gt;<br /><br />applicationContext-hibernate和applicationContext-service分开容易管理<br /><br /><font color="#ff3300">hibernate.cfg.xml</font><br />&lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.SQLServerDialect&lt;/property&gt;<br />        &lt;property name="hibernate.connection.driver_class"&gt;net.sourceforge.jtds.jdbc.Driver&lt;/property&gt;<br />        &lt;property name="hibernate.connection.url"&gt;jdbc:jtds:sqlserver://172.1.1.11:1433/EMMS2 &lt;/property&gt;<br />        &lt;property name="hibernate.connection.username"&gt;sa&lt;/property&gt;<br />        &lt;property name="hibernate.connection.password"&gt;8888&lt;/property&gt;<br />        &lt;property name="hibernate.query.factory_class"&gt;org.hibernate.hql.classic.ClassicQueryTranslatorFactory&lt;/property&gt;</p>
		<p>        &lt;property name="hibernate.query.substitutions"&gt;false 0, true 1&lt;/property&gt;<br />        &lt;!-- c3p0 connection pooling properties --&gt;<br />        &lt;property name="hibernate.c3p0.min_size"&gt;1&lt;/property&gt;<br />        &lt;property name="hibernate.c3p0.max_size"&gt;3&lt;/property&gt;<br />        &lt;!-- other hibernate properties --&gt;<br />        &lt;property name="hibernate.show_sql"&gt;true&lt;/property&gt;<br />        &lt;!-- &lt;property name="hbm2ddl.auto"&gt;update&lt;/property&gt; --&gt;<br />         <br />        &lt;mapping resource="com/opensymphony/workflow/spi/hibernate3/HibernateCurrentStep.hbm.xml"/&gt;<br />   &lt;mapping resource="com/opensymphony/workflow/spi/hibernate3/HibernateHistoryStep.hbm.xml"/&gt;<br />   &lt;mapping resource="com/opensymphony/workflow/spi/hibernate3/HibernateWorkflowEntry.hbm.xml"/&gt;<br /><br />    &lt;/session-factory&gt;<br />&lt;/hibernate-configuration&gt;</p>
<img src ="http://www.blogjava.net/nikon/aggbug/95977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-01-25 16:08 <a href="http://www.blogjava.net/nikon/archive/2007/01/25/95977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING + HIBERNATE +OSWORKFLOW  的配置文件(1)</title><link>http://www.blogjava.net/nikon/archive/2007/01/25/95976.html</link><dc:creator>李立波</dc:creator><author>李立波</author><pubDate>Thu, 25 Jan 2007 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/nikon/archive/2007/01/25/95976.html</guid><wfw:comment>http://www.blogjava.net/nikon/comments/95976.html</wfw:comment><comments>http://www.blogjava.net/nikon/archive/2007/01/25/95976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nikon/comments/commentRss/95976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nikon/services/trackbacks/95976.html</trackback:ping><description><![CDATA[
		<p> 这是我实际项目经验中配置,还有一个applicationContext-hibernate.xml,和hibernate.cfg.xml下遍文档发<br /><br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;<br />&lt;beans&gt;<br /> &lt;!--  hibernate configuration --&gt;<br /> &lt;import resource="applicationContext-hibernate.xml" /&gt;</p>
		<p> &lt;!--  ========================  dao helper ,set to service,transation ============  --&gt;</p>
		<p>
				<br /> &lt;bean id="transactionManager"<br />  class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref bean="sessionFactory" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</p>
		<p> </p>
		<p> &lt;!--  ========================  end dao setup ============  --&gt;<br /> <br /> &lt;!--  ============================================================================  --&gt;<br /> &lt;!--  ======================== 系统业务层 =======================================  --&gt;<br /> &lt;!--  ============================================================================  --&gt;</p>
		<p>
				<br /> &lt;!--  ========================  begin to setup dgsei System Service ============  --&gt;<br /> &lt;!-- ************  公共transactionManager proxy 继承后就能有事务管理　方法是set parent="baseServiceProxy"  === --&gt;<br /> &lt;bean id="baseServiceProxy" lazy-init="true"<br />  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />  &lt;property name="transactionManager"&gt;<br />   &lt;ref local="transactionManager" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="transactionAttributes"&gt;<br />   &lt;props&gt;<br />    &lt;prop key="modify*"&gt;<br />     PROPAGATION_REQUIRED,-com.newsoft.notMoneyException<br />    &lt;/prop&gt;<br />    &lt;prop key="update*"&gt;<br />     PROPAGATION_REQUIRED,-Exception<br />    &lt;/prop&gt;<br />    &lt;prop key="add*"&gt;PROPAGATION_REQUIRED,-Exception&lt;/prop&gt;<br />    &lt;prop key="create*"&gt;<br />     PROPAGATION_REQUIRED,-Exception<br />    &lt;/prop&gt;<br />    &lt;prop key="save*"&gt;PROPAGATION_REQUIRED,-Exception&lt;/prop&gt;<br />    &lt;prop key="delete*"&gt;<br />     PROPAGATION_REQUIRED,-Exception<br />    &lt;/prop&gt;<br />    &lt;prop key="remove*"&gt;<br />     PROPAGATION_REQUIRED,-Exception<br />    &lt;/prop&gt;<br />    &lt;prop key="do*"&gt;PROPAGATION_REQUIRED,-Exception&lt;/prop&gt;<br />    &lt;prop key="is*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />    &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />    &lt;prop key="find*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />    &lt;!-- prop key="query*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />     &lt;prop key="someOtherBusinessMethod"&gt;PROPAGATION_MANDATORY&lt;/prop--&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</p>
		<p> &lt;!--  =============   end ==== --&gt;<br />    &lt;!-- <br />  OS<br /> --&gt;<br /> &lt;bean id="workflowStore"<br />  class="com.opensymphony.workflow.spi.hibernate3.SpringHibernateWorkflowStore" &gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref bean="sessionFactory" /&gt;<br />    &lt;/property&gt;<br /> &lt;property name="propertySetDelegate"&gt;<br />  &lt;bean id="propertySetDelegate"<br />  class="com.opensymphony.workflow.util.PropertySetDelegateImpl" /&gt;<br /> &lt;/property&gt;<br />   &lt;/bean&gt;<br /> &lt;bean id="workflowFactory"<br />  class="com.opensymphony.workflow.spi.hibernate.SpringWorkflowFactory"<br />  init-method="init"&gt;<br />  &lt;property name="resource"&gt;<br />   &lt;value&gt;workflows.xml&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;bean id="workflowConfiguration"<br />  class="com.opensymphony.workflow.config.SpringConfiguration"&gt;<br />  &lt;property name="store"&gt;<br />   &lt;ref local="workflowStore" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="factory"&gt;<br />   &lt;ref local="workflowFactory" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt;<br />        &lt;property name="transactionManager"&gt;<br />              &lt;ref local="transactionManager" /&gt;<br />        &lt;/property&gt;<br />        &lt;property name="transactionAttributes"&gt;<br />              &lt;props&gt;<br />                  &lt;prop key="*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />              &lt;/props&gt;<br />        &lt;/property&gt;<br />    &lt;/bean&gt;<br />    &lt;bean id="workflowTarget" class="com.opensymphony.workflow.basic.BasicWorkflow" singleton="false"&gt;<br />        &lt;constructor-arg&gt;<br />              &lt;value&gt;admin&lt;/value&gt;<br />        &lt;/constructor-arg&gt;<br />        &lt;property name="configuration"&gt;<br />              &lt;ref local="workflowConfiguration" /&gt;<br />        &lt;/property&gt;<br />    &lt;/bean&gt;<br />    &lt;bean id="workflow" class="org.springframework.aop.framework.ProxyFactoryBean"&gt;<br />        &lt;property name="singleton"&gt;<br />              &lt;value&gt;false&lt;/value&gt;<br />        &lt;/property&gt;<br />        &lt;property name="proxyInterfaces"&gt;<br />              &lt;value&gt;com.opensymphony.workflow.Workflow&lt;/value&gt;<br />        &lt;/property&gt;<br />        &lt;property name="interceptorNames"&gt;<br />              &lt;list&gt;<br />                  &lt;value&gt;transactionInterceptor&lt;/value&gt;<br />                  &lt;value&gt;workflowTarget&lt;/value&gt;<br />              &lt;/list&gt;<br />        &lt;/property&gt;<br />    &lt;/bean&gt;<br />    </p>
		<p> &lt;!-- OS END --&gt;<br /> <br /> &lt;!-- 监管中心创建记录 --&gt;<br /> &lt;!-- dao的实现  sessionFactory用的是前面Spring定义的--&gt;<br /> &lt;bean id="maintRecordDao"<br />  class="com.newsoft.equipmentMaintenance.dao.MaintRecordDaoImpl"&gt;<br />  &lt;property name="sessionFactory" ref="sessionFactory" /&gt;<br /> &lt;/bean&gt;<br /> &lt;!-- BO的接口 target 是指向BO实现类id parent是事物代理类的ID ,proxyInterfaces是被代理的接口类--&gt;</p>
		<p> &lt;bean id="maintRecordService" parent="baseServiceProxy"&gt;<br />  &lt;property name="target"&gt;<br />   &lt;ref local="maintRecordImpl" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="proxyInterfaces"&gt;<br />   &lt;value&gt;<br />    com.newsoft.equipmentMaintenance.bo.maintenanceRecord.MaintRecordService<br />   &lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> &lt;!-- BO的实现 MaintRecordDao 是指向DAO接口类id--&gt;<br /> &lt;bean id="maintRecordImpl"<br />  class="com.newsoft.equipmentMaintenance.bo.maintenanceRecord.impl.MaintRecordImpl"&gt;<br />  &lt;property name="maintRecordDao"&gt;<br />   &lt;ref local="maintRecordDao" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="workflow"&gt;<br />   &lt;ref local="workflow" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br />&lt;/beans&gt;<br /> </p>
<img src ="http://www.blogjava.net/nikon/aggbug/95976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nikon/" target="_blank">李立波</a> 2007-01-25 16:05 <a href="http://www.blogjava.net/nikon/archive/2007/01/25/95976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>