﻿<?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-junctioner-随笔分类-技术之路</title><link>http://www.blogjava.net/junctioner/category/6454.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 01 Jun 2007 05:47:19 GMT</lastBuildDate><pubDate>Fri, 01 Jun 2007 05:47:19 GMT</pubDate><ttl>60</ttl><item><title>Velocity之首次研究</title><link>http://www.blogjava.net/junctioner/archive/2007/05/30/120928.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Wed, 30 May 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2007/05/30/120928.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/120928.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2007/05/30/120928.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/120928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/120928.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 与Velocity的第一次见面，是03年，有个新同事推荐使用，因当时我在做别的项目，也没怎么仔细了解，简单的知晓类似如模板一类的东西。之后有过几次接触，但，都没花时间仔细看，前段时间，帮朋友做一个小东西，觉得用个模板做，会省很多事，想到Velocity。东西很小，做完了都没时间看Velocity，今天正好有时间，研究研究。<br>&nbsp;&nbsp;&nbsp; Velocity是apache下的一个开源项目，其网址：http://velocity.apache.org/;下载地址：http://velocity.apache.org/download.cgi，可直接下载源码，也可通过SVN获取源码。<br>&nbsp;&nbsp;&nbsp; 在eclipse中创建一个web应用工程，把Velocity的源码拷到java资源目录下，自动编译后，报几个错，拷贝下载的Velocity源码lib目录下的commons-collections-3.1.jar、oro-2.0.8.jar、commons-lang-2.1.jar这个三类包到web应用工程的lib目录下即可。<br>&nbsp;&nbsp;&nbsp; 准备就绪，就写个例子跑跑试试。写一个hello.vm的模板文件，创建一个对应的Servlet，就可以运行了。两文件源码贴出如下：<br>&nbsp;&nbsp;&nbsp; hello.vm
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;#set($greet&nbsp;=&nbsp;"你好哇！")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello！$name,&nbsp;$greet<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">body</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span></div>
&nbsp;&nbsp;&nbsp; HelloServlet.java<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.FileNotFoundException;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.IOException;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Hashtable;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Properties;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.ServletConfig;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.velocity.Template;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.velocity.app.Velocity;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.velocity.context.Context;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.apache.velocity.servlet.VelocityServlet;<br><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> HelloServlet&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;<span style="COLOR: red">VelocityServlet</span>&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">&nbsp;Properties&nbsp;<span style="COLOR: green">loadConfiguration</span>(ServletConfig&nbsp;config)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;IOException,&nbsp;FileNotFoundException&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Properties&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Properties();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;config.getServletContext().getRealPath(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(path&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH,&nbsp;path);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">runtime.log</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;path&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">velocity.log</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setProperty(<span style="COLOR: green">Velocity.INPUT_ENCODING,&nbsp;</span></span><span style="COLOR: green">"GBK"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setProperty(<span style="COLOR: green">Velocity.OUTPUT_ENCODING,&nbsp;</span></span><span style="COLOR: green">"GBK"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;p;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Template&nbsp;handleRequest(HttpServletRequest&nbsp;request,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response,&nbsp;Context&nbsp;ctx)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Template&nbsp;template&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">ctx.put(</span></span><span style="COLOR: red">"name","Velocity"</span><span style="COLOR: #000000"><span style="COLOR: red">);</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">template&nbsp;</span></span><span style="COLOR: red">=&nbsp;Velocity.getTemplate("/hello.vm"</span><span style="COLOR: #000000"><span style="COLOR: red">);</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;template;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br></span></div>
&nbsp;&nbsp;&nbsp; 创建servelt要注意的几个地方。<br>&nbsp;&nbsp;&nbsp; 1、新建的Servlet要扩展Velocity的VelocityServlet<br>&nbsp;&nbsp;&nbsp; 2、在servlet中要实现 public Template handleRequest(HttpServletRequest request,HttpServletResponse response, Context ctx) <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; A)把要返回到页面上的数据放到context中对应到指定键值（键值名为对应模板中定义的变量名）<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; B)引入指定模板文件<br>&nbsp;&nbsp;&nbsp; 3、导入配置文件的方法protected Properties loadConfiguration(ServletConfig config)，是否实现，是可选的&nbsp;，其作用在后面说明。<br><br>发布运行后，访问http://localhost:8080/vt/HelloServelt，就可看到结果了。<br><br>运行起来，看到结果，是觉得很简单，其运行过程，就要跟踪看源码才能知道了。<br><br>&nbsp;&nbsp;&nbsp; 看源码，先看的，肯定是VelocityServlet.java。发现源码注释中，这个类已不推荐使用，推荐使用Velocity的一个子项目tool中的VelocityViewServlet.java，我没有当tool子项目，就先看这个&#8220;过时的&#8221;实现。<br>&nbsp;&nbsp;&nbsp;&nbsp; VelocityServlet.java，扩展了HttpServlet，实现了doGet、doPost、init基本方法，前两个方法都直接调用新实现的doRequest方法，这些都是很常规的操作。<br>&nbsp;&nbsp;&nbsp; doRequest方法做如下几件事：创建上下文、设置响应内容文件类型、获取模板（调用每个请求中的具体实现）、合并数据做出响应、出错处理及资源清理。看到这儿，整个请求和响应过程很清晰，并没什么特别的处理。<br>&nbsp;&nbsp;&nbsp; 接下来，看看它的初始化做了些什么事。就做了三件事，超类初始化、自己的初始化、缓存内容类型数据。自己的初始化，也就是(i)导入配置信息，(ii)根据配置信息做初始化设置。导入配置信息，是根据指定的几个地方，获取配置数据（在提供的样例中，重载了它的获取配置数据的方法，自己灵活的写入一些配置信息）;根据配置信息做初始化的工作，应用单例设计模式，保证初始化工作的处理唯一。<br>&nbsp;&nbsp;&nbsp; VelocityServlet自已的初始化，调用另一个类org.apache.velocity.app.Velocity的init( Properties p )方法，就看看Velocity里做了些什么。Velocity里全是静态方法。主要有如下几个方法：<br>&nbsp;&nbsp;&nbsp; 1、初始化;2、预演传入的数据（发现在应用中没有使用，只在单元测试代码中引用到）;3、合并数据和模板;4、设置/获取属性;5、操作信息提示（不过，都不推荐使用了），整个的看下来，有两点：1、主要的还是初始化和数据合并了;2、这个类只是一个中转类，所有的方法，最终都是调另一个类org.apache.velocity.runtime.RuntimeSingleton的方法。<br>&nbsp;&nbsp;&nbsp; 打开RuntimeSingleton的代码，看一看，发现它同Velocity类差不多，类本身不做实际的处理操作。它与Velocity不同的是，它是申明一个静态的实例，再调用这个实例，个别地方（init()）加了同步控制。如此处理体现它这个类的名字－－单例，核心的还是这个静态实例org.apache.velocity.runtime.RuntimeInstance。<br>&nbsp;&nbsp;&nbsp; 到RuntimeInstance，就开始接触到Velocity的处理核心了。<br><br>&nbsp;&nbsp;&nbsp; 写到这儿，突然没有写下去的冲动了，暂切休息一下。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 抽时间看了一下Velocity子项目tool下的VelocityViewServlet的源码，比VelocityServlet要实现的好多了，与struct接合的比较好。<br>&nbsp;&nbsp;&nbsp; Velocity，不仅仅适合于web应用，还可以作生成SQL、XML的模板，内容比较多，待一一挖掘。
<img src ="http://www.blogjava.net/junctioner/aggbug/120928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2007-05-30 15:49 <a href="http://www.blogjava.net/junctioner/archive/2007/05/30/120928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源需要一个良好的商业模式</title><link>http://www.blogjava.net/junctioner/archive/2007/04/24/113100.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Tue, 24 Apr 2007 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2007/04/24/113100.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/113100.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2007/04/24/113100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/113100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/113100.html</trackback:ping><description><![CDATA[在网上看到&#8220;<font size="3">盖茨北大演讲遭开源人士抗议</font>&#8221;一事，对开源兄的行为，我选择不置可否，但对软件而言，我选择开源。<br>现在的局面是，商业化的软件比开源的软件，要活地滋润、舒展多了，所以也会发生这次事件。<br><br>为什么会出面这种局面？为什么需要开源？在这里我不阐述自己的观点－－持有同感的人都有自己的想法。<br><br>开源如果想要活得不那么艰难，我想：需要一个良好的商业模式支持。<br>开源不是免费！<br>开源要生存发展，也需要营养供应，不能仅靠一部分怀开源激情的人或者组织无偿奉献能支撑起来的。<br>linux、jboss的生存模式算是比较成功的，但还不能够同商业化软件相比较，还需要更充足的营养源。<br>这二者的模式也是一定范围内有效，不能做到推而广之。<br><br>开源软件生存模式的探索之路还很广，还很远，需要有志之士共同努力。<br><br><img src ="http://www.blogjava.net/junctioner/aggbug/113100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2007-04-24 10:03 <a href="http://www.blogjava.net/junctioner/archive/2007/04/24/113100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在eclipse 3.3m6发布之际的感慨</title><link>http://www.blogjava.net/junctioner/archive/2007/03/28/106930.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Wed, 28 Mar 2007 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2007/03/28/106930.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/106930.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2007/03/28/106930.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/106930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/106930.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/junctioner/archive/2007/03/28/106930.html'>阅读全文</a><img src ="http://www.blogjava.net/junctioner/aggbug/106930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2007-03-28 13:20 <a href="http://www.blogjava.net/junctioner/archive/2007/03/28/106930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再次开始centric crm研究</title><link>http://www.blogjava.net/junctioner/archive/2007/03/02/101477.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Fri, 02 Mar 2007 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2007/03/02/101477.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/101477.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2007/03/02/101477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/101477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/101477.html</trackback:ping><description><![CDATA[上次看centric crm，是一年多前的事了，这一年中，忙忙碌碌的，都不知道做了些什么，但还是一直关注crm的相关信息。<br />年初，有个朋友需要一套CRM软件，我就给他推荐centric crm，但他不懂技术，希望我帮他搞搞，这就应了下来，又一次开始认真的看centric crm。

<br />［温故而知新］
看以前贴的关于centric crm的blog，心有惭愧，希望产生误导的影响不会很大。

<br /><br />今天作一些更正，算是补偿。<br />1、获取centric crm源码，得先注册，注册地址：http://www.centriccrm.com/Register.do<br /> 　　先输入你的邮箱地址（登录用这个）；<br /> 　　个人名称可随便填写；<br /> 　　注册成功后，密码会发送到你邮箱中，

<br /><br />2、官方用SubVersion管理centic crm的源码，可以当一个subverion的客户端，指定到要下载版本的链接，
　　输入注册的邮箱和密码，就可以获取源码。<br />
　　现在有4.0和4.1两个版本，subverion链接分别如下，
　　<br />
　　4.1源码：https://svn.centricsuite.com/webapp/branches/branch-41
　　<br />
　　4.0源码：https://svn.centricsuite.com/webapp/tags/rel-200611151353-402

　　<br /><br />
　　我使用eclipse，装了个SVN插件，配好后，直接check out成eclipse的项目。
　　<br />
　　SVN eclipse plugin是subclipse,插件获取网站：http://subclipse.tigris.org/update_1.2.x

<br /><br />3、源码获取下来目录如下图<br /><img src="http://www.blogjava.net/images/blogjava_net/junctioner/img1/Snap1.gif" alt="centric crm源文件目录结构" border="0" height="574" width="305" /><br /><br />［源码check out到eclipse后，把整个项目编码方式改为UTF-8，因源文件注释中有些时间戳是中文简体字，不设成UTF-8，就显示为乱码，看起来没什么大碍，但若修改源文件再保存就会弹出编码格式不正确错误信息］<br />bin：暂没看这个目录中的内容<br />doc：基本文件目录<br />    Binary EULA.rtf:版权申明的文件;<br />    CRM Installation and Setup.pdf:安装配置文件，描述的比较简单;<br />    db-schema.html:库表设计说明文件，了解centric CRM表结构这个文件最佳参考资料<br />lib：项目需要的jar文件目录<br />pref：特定情况下需要的配置文件目录<br />src：源码基本目录<br />    src目录内有下面四个主要目录：<br />    java:java源文件目录<br />    web:web展示源文件目录<br />    sql:库表脚本文件目录<br />    testcases:单元测试文件目录<br /><br />    src目录内有下面四个主要文件：<br />    build.xml：项目编译、发布的ant配置文件<br />    home.properties.example：build.xml的辅助文件样例，定义一些基本路径信息，如：服务发布目录<br />    master.properties：build.xml的辅助文件，定义系统的一些属性配置<br />    README.txt：比较详细的安装配置文件（我就是看这个文件进行安装配置的，有时间可以把安翻译成中文）<br />4、开始安装配置<br />    1）安装需求Java JDK，就不用说了，1.4以上都可以，1.4以下行不行，我也没试，有兴趣的朋友可试试，测试结果能告之当是感激了。我装的是JDK 5.0。<br />    2）应用服务用tomcat 5.0,5.5都可以（不过tomcat5.5得在JDK5.0上才能运行起来），Jboss、Weblogic、WebSphere、Resin也可以运行。我用Tomcat 5.5.3。<br />    3）数据库支持DB、MSSQL、MySQL、Oracle等，具体信息可看README.txt。我用的是MySQL 5.0.21。驱动jar是MySQL官网下载的 mysql-connector-java-5.0.4-bin.jar。<br />    4）还需要有ant工具，申明是要1.6的，我用eclipse自带的1.6.5。<br />    5）centric CRM中用到WebServices,可去下载一个，<br />    下载地址：http://apache.downlod.in/ws/axis/1_4/axis-src-1_4.zip。<br />    解开zip包，把webapp下面的axis目录拷贝到$tomcat/webapps/目录下。<br /><br />    准备好上几步要求的，可以开始配置build.xml运行的两个属性文件。<br />    复制home.properties.example文件为 home.properties，相关属性做如下修改：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
## The following properties can be set instead of using environment variables<br /><br />
## Declare the webapp server's directory to compile using web app server libraries<br />
## based on the webapp type configured in build.properties<br /><font color="#008000">## 设置Tomcat安装路径</font><br /><font color="#ff0000">CATALINA_HOME=D:/java/tomcat5.5.3</font><br />
#GERONIMO_HOME=/path/to/geronimo or websphere ce<br />
#JBOSS_HOME=/path/to/jboss<br />
#WEBLOGIC_HOME=/path/to/weblogic<br />
#WEBSPHERE_HOME=/path/to/websphere<br /><br />
## CENTRIC_HOME can be used to compile directly to the webapp's deployment<br />
## directory (for development), or to any directory for later generating a .war<br /><font color="#008000">## 设置centric CRM 发布到tomcat中的路径</font><br /><font color="#ff0000">CENTRIC_HOME=D:/java/tomcat5.5.3/webapps/centric</font><br />
#CENTRIC_HOME=/path/to/weblogic/domain/autodeploy/directory<br /><br />
## At times, scripts will need to install or upgrade fileLibrary documents when<br />
## deploying from source<br /><font color="#008000">## 设置项目中配置文件存放目录</font><br /><font color="#ff0000">CENTRIC_FILELIBRARY=D:/Project.java/Centric CRM 4.1/fileLibrary</font><br />
## To skip web based GUI the fileLibrary must be in the WEB-INF folder, useful<br />
## for development<br /><font color="#008000">## 设置配置文件发布目录</font><br /><font color="#ff0000">CENTRIC_FILELIBRARY=D:/java/tomcat5.5.3/webapps/centric/WEB-INF/fileLibrary</font><br /><br />
## If using Axis Web Services, then declare the webapp home so that the<br />
## Centric CRM descriptors can be installed with "ant ws"<br /><font color="#008000">## 设置axis在tomcat中的发布目录</font><br /><font color="#ff0000">AXIS_HOME=D:/java/tomcat5.5.3/webapps/axis</font><br /></div>
      <br />    master.properties 相关属性做如下修改：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><br />##
<br />## NOTE: Do not edit "master.properties" -- edit a copy of it
<br />## These settings are used by ant for the build and installation process
<br />## 
<br /><br /><br /><br /><br />## PART 1: Are you reading the instructions? (required)
<br /><br />## The following is a control, uncomment the following line after modifying
<br />## these properties... we just want to make sure you're paying attention and
<br />## the build process doesn't do something it shouldn't!
<br /><font color="green">## 确认修改过此配置文件标识</font><br /><font color="red">PROPERTIES=configured</font><br /><br /><br /><br /><br />## PART 2: Deployment settings (required for compiling)
<br /><br />## Default language setting: even though any locale can be specified, the
<br />## following have Centric CRM translations and supporting database data
<br />## args="de_DE,en_US,es_VE,fr_FR,it_IT,ja_JP,nl_NL,pt_BR,ro_RO,ru_RU,sl_SI"/&gt;
<br />SYSTEM.LANGUAGE=en_US
<br /><br />## Web server debug level:
<br />## Extended debug information can be displayed in the web server's log file
<br />## Comment out for no debugging, especially production server
<br />DEBUGLEVEL=2
<br />#DEBUG=true
<br />#DEBUGLEVEL=lines,vars,source
<br /><br />## Specify the web server to build/deploy against (required):
<br />## Use catalina for Tomcat
<br />## Use geronimo for WAS-CE or Apache Geronimo
<br />## All others untested but planned for
<br /><font color="green">## 指定Web Server 应用服务类型</font><br /><font color="red">WEBSERVER.TYPE=catalina</font><br />#WEBSERVER.TYPE=geronimo
<br />#WEBSERVER.TYPE=jboss
<br />#WEBSERVER.TYPE=weblogic
<br />#WEBSERVER.TYPE=websphere
<br /><br />## A self-signed SSL Certificate will be generated with the following parameters,
<br />## which can then be added to Tomcat's SSL configuration and/or
<br />## signed by an authority
<br />## Common name should be a domain name
<br />## Ex. *.yourcompany.com or www.yourcompany.com
<br />KEYSTORE.COMMONNAME=127.0.0.1
<br />KEYSTORE.ORGANIZATION=Company
<br />KEYSTORE.ORGANIZATIONALUNIT=Unit
<br />KEYSTORE.CITY=City
<br />KEYSTORE.STATE=State
<br />KEYSTORE.COUNTRY=US
<br />KEYSTORE.VALIDITY=1000
<br /><br />## Force users to use SSL in Centric CRM
<br />## The web server must be configured for SSL if this option is set to true as
<br />## Centric CRM will redirect non-secure URLs to the secure URL
<br />FORCESSL=false
<br /><br /><br /><br /><br />## PART 3: Database installation settings (required for database installation)
<br /><br />## Uncomment and set the connection information for your specific database
<br />## NOTE: The gatekeeper URL includes your database name, the site URL does not;
<br />## The ant script will insert the database name after the specified url
<br /><br /><br />## DB2
<br />## CREATE DATABASE centric USING CODESET UTF-8 TERRITORY US pagesize 32 k
<br />#GATEKEEPER.DBTYPE=db2
<br />#GATEKEEPER.DRIVER=com.ibm.db2.jcc.DB2Driver
<br />#GATEKEEPER.URL=jdbc:db2://127.0.0.1:50000/centric
<br />#GATEKEEPER.USER=db2admin
<br />#GATEKEEPER.PASSWORD=
<br />#SITE.DBTYPE=db2
<br />#SITE.DRIVER=com.ibm.db2.jcc.DB2Driver
<br />#SITE.URL=jdbc:db2://127.0.0.1:50000/
<br />#SITE.USER=db2admin
<br />#SITE.PASSWORD=
<br /><br />## POSTGRESQL
<br />## createdb -E UNICODE centric_crm
<br />#GATEKEEPER.DBTYPE=postgresql
<br />#GATEKEEPER.DRIVER=org.postgresql.Driver
<br />#GATEKEEPER.URL=jdbc:postgresql://127.0.0.1:5432/centric_crm
<br />#GATEKEEPER.USER=postgres
<br />#GATEKEEPER.PASSWORD=
<br />#SITE.DBTYPE=postgresql
<br />#SITE.DRIVER=org.postgresql.Driver
<br />#SITE.URL=jdbc:postgresql://127.0.0.1:5432/
<br />#SITE.USER=postgres
<br />#SITE.PASSWORD=
<br /><br />## MySQL
<br />## CREATE DATABASE centric_crm CHARACTER SET utf8 COLLATE utf8_general_ci
<br /><font color="green">## 指定数据库类型及连接配置</font><br /><font color="red">GATEKEEPER.DBTYPE=mysql
<br />GATEKEEPER.DRIVER=com.mysql.jdbc.Driver
<br />GATEKEEPER.URL=jdbc:mysql://127.0.0.1:3306/my_centric_crm
<br />GATEKEEPER.USER=my_centric_crm
<br />GATEKEEPER.PASSWORD=crm
<br />SITE.DBTYPE=mysql
<br />SITE.DRIVER=com.mysql.jdbc.Driver
<br />SITE.URL=jdbc:mysql://127.0.0.1:3306/
<br />SITE.USER=my_centric_crm
<br />SITE.PASSWORD=crm</font><br /><br />## MS SQL SERVER
<br />#GATEKEEPER.DBTYPE=mssql
<br />#GATEKEEPER.DRIVER=net.sourceforge.jtds.jdbc.Driver
<br />#GATEKEEPER.URL=jdbc:jtds:sqlserver://127.0.0.1:1433/centric_crm
<br />#GATEKEEPER.USER=centric_crm
<br />#GATEKEEPER.PASSWORD=
<br />#SITE.DBTYPE=mssql
<br />#SITE.DRIVER=net.sourceforge.jtds.jdbc.Driver
<br />#SITE.URL=jdbc:jtds:sqlserver://127.0.0.1:1433/
<br />#SITE.USER=centric_crm
<br />#SITE.PASSWORD=
<br /><br />## CodeGear's InterBase (formally owned by Borland) www.codegear.com
<br />## Do NOT put the database in the centric file library, or at least the root, 
<br />## as the build.xml copies its prefs into there using the same name as your database file!
<br />## "e:/centriccrm_db" is only an example
<br />#GATEKEEPER.DBTYPE=interbase
<br />#GATEKEEPER.DRIVER=interbase.interclient.Driver
<br />#GATEKEEPER.URL=jdbc:interbase://127.0.0.1:3050/e:/centriccrm_db/centric_crm.ib
<br />#GATEKEEPER.USER=sysdba
<br />#GATEKEEPER.PASSWORD=masterkey
<br />#SITE.DBTYPE=interbase
<br />#SITE.DRIVER=interbase.interclient.Driver
<br />#SITE.URL=jdbc:interbase://127.0.0.1:3050/e:/centriccrm_db/
<br />#SITE.USER=sysdba
<br />#SITE.PASSWORD=masterkey
<br /><br />## FIREBIRD SQL
<br />#GATEKEEPER.DBTYPE=firebird
<br />#GATEKEEPER.DRIVER=org.firebirdsql.jdbc.FBDriver
<br />#GATEKEEPER.URL=jdbc:firebirdsql:127.0.0.1/3050:${CENTRIC_FILELIBRARY}/centric_crm.fdb
<br />#GATEKEEPER.USER=sysdba
<br />#GATEKEEPER.PASSWORD=masterkey
<br />#SITE.DBTYPE=firebird
<br />#SITE.DRIVER=org.firebirdsql.jdbc.FBDriver
<br />#SITE.URL=jdbc:firebirdsql:127.0.0.1/3050:${CENTRIC_FILELIBRARY}/
<br />#SITE.USER=sysdba
<br />#SITE.PASSWORD=masterkey
<br /><br />## DAFFODIL DB EMBEDDED
<br />#GATEKEEPER.DBTYPE=daffodildb
<br />#GATEKEEPER.DRIVER=in.co.daffodil.db.jdbc.DaffodilDBDriver
<br />## YOU MUST EDIT THE path in the following line to where you want the database
<br />## created.
<br />## The user and password must be set to daffodil
<br />#GATEKEEPER.URL=jdbc:daffodilDB_embedded:centric_crm;create=true;path=/home/fileLibrary/centric_crm/daffodildb
<br />#GATEKEEPER.USER=daffodil
<br />#GATEKEEPER.PASSWORD=daffodil
<br />#SITE.DBTYPE=daffodildb
<br />#SITE.DRIVER=in.co.daffodil.db.jdbc.DaffodilDBDriver
<br />#SITE.URL=jdbc:daffodilDB_embedded:
<br />## YOU MUST EDIT THE path in the following line to where you want the database
<br />## created.
<br />## Ex. Use the same path as Centric CRM's deployed file library, then the name of
<br />## the database, then end in daffodildb
<br />## The user and password must be set to daffodil
<br />#SITE.APPEND=;create=true;path=/home/fileLibrary/centric_crm/daffodildb
<br />#SITE.USER=daffodil
<br />#SITE.PASSWORD=daffodil
<br /><br />## ORACLE
<br />## During installdb, use XE (or whatever you add under gatekeeper) for the
<br />## database name since the install has not been adjusted for Oracle yet
<br />#GATEKEEPER.DBTYPE=oracle
<br />#GATEKEEPER.DRIVER=oracle.jdbc.driver.OracleDriver
<br />#GATEKEEPER.URL=jdbc:oracle:thin:@//127.0.0.1:1521/XE
<br />#GATEKEEPER.USER=
<br />#GATEKEEPER.PASSWORD=
<br />#SITE.DBTYPE=oracle
<br />#SITE.DRIVER=oracle.jdbc.driver.OracleDriver
<br />#SITE.URL=jdbc:oracle:thin:@//127.0.0.1:1521/
<br />#SITE.USER=
<br />#SITE.PASSWORD=
<br /><br />## Derby
<br />#GATEKEEPER.DBTYPE=derby
<br />#GATEKEEPER.DRIVER=org.apache.derby.jdbc.EmbeddedDriver
<br />## YOU MUST EDIT THE path in the following line to where you want the database
<br />## created.
<br />#GATEKEEPER.URL=jdbc:derby:/home/fileLibrary/centric_crm/derbydb;create=true;upgrade=true
<br />#GATEKEEPER.USER=centric_crm
<br />#GATEKEEPER.PASSWORD=
<br />#SITE.DBTYPE=derby
<br />#SITE.DRIVER=org.apache.derby.jdbc.EmbeddedDriver
<br />## YOU MUST EDIT THE path in the following line to where you want the database
<br />## created.
<br />#SITE.URL=jdbc:derby:/home/fileLibrary/centric_crm/
<br />#SITE.APPEND=;create=true;upgrade=true
<br />#SITE.USER=centric_crm
<br />#SITE.PASSWORD=
<br /><br /><br />## PART 4: Advanced configuration (optional)
<br /><br />## Web-based configuration is recommended and is the default setting
<br />##
<br />## If you uncomment the following CONTROL line then you must configure the
<br />## remaining parameters yourself.  You will also have to create a new Centric
<br />## CRM user and password before using Centric CRM.
<br />##
<br />## If you DO NOT uncomment the CONTROL line, then the first time you use
<br />## Centric CRM, you will be presented with a configuration wizard which will
<br />## assist you in defining these parameters and creating a new Centric CRM
<br />## user and password.
<br />##
<br />#CONTROL=BYPASS_WEB-BASED_APPLICATION_SETUP
<br /><br />## The following are methods for working with multiple development databases
<br />## The APPCODE must be the same for the following Gatekeeper prefs and Site prefs
<br />GATEKEEPER.APPCODE=centric
<br />SITE.APPCODE=centric
<br /><br />## Define the web address used in communications when using a single development
<br />## database
<br />#WEBSERVER.URL=127.0.0.1:8080/centric
<br /><br />## Define the web address used in communications when using multiple development
<br />## databases
<br />#WEBSERVER.ASPMODE=true
<br />#WEBSERVER.PORT=8080
<br />#WEBSERVER.CONTEXT=/centric
<br /><br />## The server's default timezone for new users (using standard Java names)
<br />SYSTEM.TIMEZONE=America/New_York
<br />## Default currency for all users
<br />SYSTEM.CURRENCY=USD
<br />## Default country for all users
<br />SYSTEM.COUNTRY=UNITED STATES
<br /><br />## External Servers used by the system
<br />MAILSERVER=127.0.0.1
<br />FAXSERVER=127.0.0.1
<br />FAXENABLED=false
<br />PROXYSERVER=false
<br />PROXYSERVER.HOST=
<br />PROXYSERVER.PORT=
<br /><br />## Apache Axis Web Services
<br /><font color="green">## 指定WebService 服务路径</font><br /><font color="red">AXIS.WEBAPP=/axis
<br />AXIS.HOST=127.0.0.1
<br />AXIS.PORT=8080</font><br /><br />## Asterisk integration
<br />ASTERISK.OUTBOUND.ENABLED=false
<br />ASTERISK.INBOUND.ENABLED=false
<br />ASTERISK.URL=
<br />ASTERISK.USERNAME=
<br />ASTERISK.PASSWORD=
<br />ASTERISK.CONTEXT=from-internal
<br /><br />## XMPP/Jabber integration
<br />XMPP.ENABLED=false
<br />XMPP.CONNECTION.SSL=false
<br />XMPP.CONNECTION.URL=
<br />XMPP.CONNECTION.PORT=5222
<br />XMPP.MANAGER.USERNAME=
<br />XMPP.MANAGER.PASSWORD=
<br /><br />## LDAP integration
<br />LDAP.ENABLED=false
<br /># Validate username OR email against LDAP: username|email
<br />LDAP.CENTRIC_CRM.FIELD=username
<br />LDAP.FACTORY=com.sun.jndi.ldap.LdapCtxFactory
<br />LDAP.SERVER=ldap://127.0.0.1:389
<br /># Search by attribute, otherwise composite DN: true|false
<br />LDAP.SEARCH.BY_ATTRIBUTE=true
<br />LDAP.SEARCH.USERNAME=cn=admin,ou=IT,o=COMPANY
<br />LDAP.SEARCH.PASSWORD=
<br />LDAP.SEARCH.CONTAINER=o=COMPANY
<br />LDAP.SEARCH.ORGPERSON=inetOrgPerson
<br />LDAP.SEARCH.SUBTREE=true
<br />LDAP.SEARCH.ATTRIBUTE=mail
<br />#LDAP.SEARCH.BY_ATTRIBUTE=false
<br />#LDAP.SEARCH.PREFIX=cn=
<br />#LDAP.SEARCH.POSTFIX=,o=COMPANY
<br /><br />## Define the system's email address
<br />EMAILADDRESS=Centric CRM &lt;noreply@127.0.0.1&gt;
<br /><br />## Timed events, definitely turn on for a production server
<br />CRON.ENABLED=true
<br /><br />## Connection Pool Settings
<br />CONNECTION_POOL.DEBUG=false
<br />CONNECTION_POOL.TEST_CONNECTIONS=false
<br />CONNECTION_POOL.ALLOW_SHRINKING=true
<br />CONNECTION_POOL.MAX_CONNECTIONS=10
<br />CONNECTION_POOL.MAX_IDLE_TIME.SECONDS=60
<br />CONNECTION_POOL.MAX_DEAD_TIME.SECONDS=300
<br /><br />## Layout Settings
<br />## Template replaces the following files which MUST exist:
<br />## CSS:
<br />##  template1.css
<br />##  template1-8pt.css
<br />##  template1-10pt.css
<br />## JSP:
<br />##  template1nav.jsp
<br />##  template1style.jsp
<br />##  template1styleNoSession.jsp
<br />##  template1styleContainer.jsp
<br />LAYOUT.TEMPLATE=template1
<br />LAYOUT.JSP.WELCOME=welcome.jsp
<br />LAYOUT.JSP.LOGIN=login.jsp
<br />#LAYOUT.JSP.LOGIN.LOGO=&lt;img src="images/centric/logo-centric.gif" width="295" height="66" alt="" border="0" /&gt;
<br />#LAYOUT.JSP.LOGIN.TEXT=Centric CRM
<br /><br />## Max Imports that can run concurrently
<br />IMPORT_QUEUE_MAX=1
<br /><br />## Opportunity behavior
<br /># OPPORTUNITY.DEFAULT_TERM=52
<br /># OPPORTUNITY.DEFAULT_UNITS=W
<br /># OPPORTUNITY.MULTIPLIER=52<br /># OPPORTUNITY.CLOSE_PROBABILITY=25,50,75
<br /></div><br />完成上述两文件的修改后，打开eclipse的ant视图，<br /><br />    运行：<font color="#ff0000"><b>ant deploy</b></font> 完成项目的编译发布工作。<br /><br />下一步是创建库表，可运行 ant installdb 创建库表。<br />    运行 ant installdb前，先在启动MySQL,创建一个表空间及用户，<br />    <font color="#0000ff">CREATE DATABASE my_centric_crm CHARACTER SET utf8 COLLATE utf8_general_ci;<br />    GRANT ALL PRIVILEGES ON my_centric_crm.* TO my_centric_crm@"%" IDENTIFIED BY "crm";</font><br /><br />    创建库表时，若出现类似"<font size="-1"><font color="#cc0033">Specified key was too long</font>; <font color="#cc0033">max key length is 765</font><font color="#cc0033">bytes</font></font>"的错误，是因为标识"UNIQUE NOT NULL"的字段长度＞255（255＝765/3）了。MySQL数据库的unique类字段长度限制比较短，视不同版本，有的限制为765个字节，有的限制为1000个字节，UTF是占用3个字节位的，所以在这个限制上还要除以3。centric CRM的mysql库脚本中，unique类字段的长度是设为300长字符的，出现上述问题一个可行的妥协办法是修改脚本unique类字段的长度。<br /><br />建完表后，可以启动tomcat服务，运行 ant ws 激活WebService，应用服务配置安装完成！<br /><br />通过 http://localhost:8080/centric,第一次进入centric crm系统。<br /><br />    第一次进入系统时，是一个登录界面，用户是dhvadmin,密码是admin,登录进入，是一步步的系统参数设置操作，操页面提示，就可完成设置。最后是创建应用系统公司名称和管理员用户密码的界面，再次使用系统时，就以管理员名称和密码登录，对系统进行设置及添加管理其他用户。（至此，告一段落。）<br /><br /><img src ="http://www.blogjava.net/junctioner/aggbug/101477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2007-03-02 14:53 <a href="http://www.blogjava.net/junctioner/archive/2007/03/02/101477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax－json-rpc处理过程</title><link>http://www.blogjava.net/junctioner/archive/2006/03/16/35644.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 16 Mar 2006 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/03/16/35644.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/35644.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/03/16/35644.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/35644.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/35644.html</trackback:ping><description><![CDATA[<p>在web.xml文件中，可以发现<br/>&nbsp; &lt;servlet-mapping&gt;<br/>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;com.metaparadigm.jsonrpc.JSONRPCServlet&lt;/servlet-name&gt;<br/>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/JSON-RPC&lt;/url-pattern&gt;<br/>&nbsp; &lt;/servlet-mapping&gt;<br/>所有的请求提交到这个Servlet后分发处理并做出响应。</p><p>JSONRPCServlet.java中实现了init()和service()，</p><p>init() 中只是取了些配置参数作了相关设置；</p><p>service() 中实现了请求处理；</p><p>1.从session中创建/获取JSONRPCBridge对象；</p><p>2.把提交的数据装入一个JSONObject对象中；</p><p>3.用JSONRPCBridge对象的call方法处理JSONObject对象并返回JSONRPCResult对象。</p><p>这个处理较ajax-buffalo 中的处理单调了不少。</p><p></p><p>再来看看JSONRPCBridge.java是如何构建的。</p><p>1.内置6个内部类：CallbackData、ClassData、LocalArgResovleData、MethodCandidate、MethodKey、ObjectInstance；</p><p>2.还有一些辅助处理的方法，比较多（提取为一个或者多个辅助类比较好）；</p><p>3.核心的就是call()方法了。运用的是java反射机制，进行方法调用。这个方法写的也比较长，没仔细看，只看到有它两个可取的地方，一个就返回对象的序列化，另一个是对不同异常，给出相应返回的处理比较细致，这样有利于找到异常在什么地方，估计是原因引起的。</p><p></p><p></p><p>在客户端的处理，是把各方法、对象串连在一起，封装后，便于应用。</p><p>它把请求的数据对象化再以串的形式提交，后端再做一个反向操作，方便了数据处理。这种方式比ajax-buffalo 中把数据组织成一个XML结构的数据包提交、处理效率高。</p><br><br>
<img src ="http://www.blogjava.net/junctioner/aggbug/35644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-03-16 13:57 <a href="http://www.blogjava.net/junctioner/archive/2006/03/16/35644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>加强对(Oracle)SQL语句的学习(0)</title><link>http://www.blogjava.net/junctioner/archive/2006/03/16/35639.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 16 Mar 2006 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/03/16/35639.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/35639.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/03/16/35639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/35639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/35639.html</trackback:ping><description><![CDATA[
		<p>－－沉浸在技术之中，如同喝高度白酒，比较麻醉人。</p>
		<p>工作中，遇到比较复杂的SQL语句，也挺费时间的。今天有时间就研究一下，找到如下几个资源链（比较懒，也懒得COPY，避嫌抄袭）</p>
		<p>
				<a href="http://www.51one.net/study/Oracle/list1.htm">http://www.51one.net/study/Oracle/list1.htm</a>
		</p>
		<p>学习两个关键字的用法，intersect（取交集），minus（取差集）</p>
		<p>(select a.name from a) intersect (select b.name from b)</p>
		<p>(select a.name from a) minus (select b.name from b)</p>
		<p>｛重学高等数学，全还给老师了，现在自己去要回来，上Google：）</p>
		<p>并集：A和B相加的全部；交集：A和B相交叠的部分；差集：并集-交集；补集：如果集合B是集合I的子集，我们把I看作全集，那么I与B的差集I－B，叫做B在I中的补集｝</p>
		<p>SQL语句优化技术分析</p>
		<p>
				<a href="http://www.pconline.com.cn/pcjob/other/data/oracle/0501/536463.html">http://www.pconline.com.cn/pcjob/other/data/oracle/0501/536463.html</a>
		</p>
		<p>避免用</p>
		<p>
		</p>
		<table style="WIDTH: 512px; HEIGHT: 73px" cellspacing="1" cellpadding="1" width="512" border="1">
				<tbody>
						<tr>
								<td> 避免使用</td>
								<td> 替代方法</td>
						</tr>
						<tr>
								<td>field in(a,b,c)</td>
								<td> field=a or field = b or field=c</td>
						</tr>
						<tr>
								<td>field is null /is not null</td>
								<td> field &gt; ' ' 、field &gt; 0</td>
						</tr>
						<tr>
								<td>
										<p> select * from a   </p>
										<p> union</p>
										<p> select * from b</p>
										<p>先取两表，再合并</p>
								</td>
								<td>
										<p> select * from a</p>
										<p> union all</p>
										<p> select * from b</p>
										<p>简单的将两个结果合并后就返回</p>
								</td>
						</tr>
						<tr>
								<td> </td>
								<td> </td>
						</tr>
				</tbody>
		</table>
		<br />
		<br />
<img src ="http://www.blogjava.net/junctioner/aggbug/35639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-03-16 13:51 <a href="http://www.blogjava.net/junctioner/archive/2006/03/16/35639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国产Ajax实现－buffalo	</title><link>http://www.blogjava.net/junctioner/archive/2006/03/16/35636.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 16 Mar 2006 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/03/16/35636.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/35636.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/03/16/35636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/35636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/35636.html</trackback:ping><description><![CDATA[		<p>早上刚发现的国产Ajax实现，现在版本是1.2，其网址是：<font color="#000066"><a href="http://www.amowa.net/buffalo">http://www.amowa.net/buffalo</a>。</font></p><p><font color="#000066">当下<a href="http://www.amowa.net/buffalo/download/1.2/buffalo-1.2.zip">buffalo-1.2.zip</a></font><font color="#000000"> 4,770KB ，</font></p><p><font color="#000000">解开，发现项目配置文件是eclipse（切喜！eclipse，my love。），</font></p><p><font color="#000000">导入eclipse中，红色的报错：三个类库变量没找到，是web服务要的三个包servlet-api.jar、jsp-api.jar、jasper-runtime.jar，在tomcat对应目录可以找到。其实还有第四个类库变量－－junit.jar，只不过eclipse中自带的有，如果不用eclipse，找到这四个jar包引入。</font></p><p><font color="#000000">项目是以java文件为主的，有一个war目录是演示用的web应用代码目录，web应用项目得自己建，这个感觉不爽，虽然它有一个build.xml文件可以打web应用包，但想调试跟踪，还是缺一步（我站在研究的角度，如果应用的话，加入那几个包，看看使用方法就可以了）。<br/></font></p><p><font color="#000000">首先研究了一下ApplicationServlet.java</font></p><p>1.这个Servlet初始化时，创建/获取了一个服务仓库（ServiceRepository）；</p><p>2.所有的请求、响应都封装成一个自定义的请求上下文本（RequestContext）；</p><p>3.根据请求的路径调用不同的RequestWorker；（这一点好，又不好）</p><p>4.剩下的就是worker开始工作了，初始化、校验、处理。</p><p>重要的也是&ldquo;处理&rdquo;，现在看看worker的结构。</p><p>接口类：interface RequestWorker　定义三个基本方法。</p><p>抽象类：abstract class AbstractRequestWorker　实现初始化和校验这两个基本方法，另实现一些其它方法。</p><p>具体实现类：ViewWorker、BuffaloWorker、UploadWorker　当然，你也可以写自己的worker</p><p>当的项目源码中，ViewWorker、UploadWorker的处理方法中都是抛出UnsupportedOperationException，想处理的话，你也可以加。现在重要的讲讲BuffaloWorker的处理。</p><p></p><p>1.通过封装的请求上下文件（RequestContext），获取服务仓库（ServiceRepository）；</p><p>2.通过请求的相对路径（此方法感觉欠妥），获取相应的服务；</p><p>3.有了&ldquo;业务处理方法&rdquo;、&ldquo;业务请求&rdquo;后，就是调用&ldquo;粗麻布调用（BurlapInvoker）&rdquo;处理余下的工作了。</p><p>前面写的是一些流程，没什么复杂的东西，这最后的 <strong><font color="#ff0000">invoker</font></strong>，是比较核心，也很经典的处理。在这里，我也不多写了，再写下去，大家也一路的看下去，没什么感觉。相信看完了 <font color="#ff0000"><strong>invoker</strong></font>的实现，一定能学到不少东西。</p><p>下次看看前端是怎么实现的，今天到此为止，休息一会！</p><br><br><img src ="http://www.blogjava.net/junctioner/aggbug/35636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-03-16 13:45 <a href="http://www.blogjava.net/junctioner/archive/2006/03/16/35636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>试玩Ajax－json-rpc</title><link>http://www.blogjava.net/junctioner/archive/2006/03/16/35635.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 16 Mar 2006 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/03/16/35635.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/35635.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/03/16/35635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/35635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/35635.html</trackback:ping><description><![CDATA[<DIV class=postText>
<P>一、下载</P>
<P>下载网站：<A href="http://freshmeat.net/projects/json-rpc-java/?branch_id=49217&amp;release_id=214415">http://freshmeat.net/projects/json-rpc-java/?branch_id=49217&amp;release_id=214415</A></P>
<P>下载地址：<A href="http://freshmeat.net/redir/json-rpc-java/49217/url_zip/json-rpc-java-1.0rc2.zip">http://freshmeat.net/redir/json-rpc-java/49217/url_zip/json-rpc-java-1.0rc2.zip</A>&nbsp;(版本1.0rc2)</P>
<P>解压后有三个文件夹、三个文件：</P>
<P>src 　jsonrpc的核心代码</P>
<P>test　演示用的java代码</P>
<P>webapps　演示用的web代码</P>
<P>build.xml　ant文件</P>
<P>jsonrpc.jar　编译好的jsonrpc核心包</P>
<P>jsonrpc.war 编译好的演示web包</P>
<P>二、安装运行</P>
<P>1、如果不想用javaIDE编译发布，配置好ant 和tomcat，用ant运行解压后的build.xml，把jsonrpc的demo发布到tomcat中，启动tomcat，打开<A href="http://127.0.0.1:8080/jsonrpc/">http://127.0.0.1:8080/jsonrpc/</A>　就可以看到演示了。</P>
<P>不过，build.xml文件要做一点适应的改动，</P>
<P>&lt;property name="tomcat" location="../jakarta-tomcat-5.0.19"/&gt;中的location值要设置为tomcat的安装目录</P>
<P>如</P>
<P>&lt;property name="tomcat" location="D:\java\Tomcat5.0"/&gt;</P>
<P>2、用javaIDE的话，我是用eclipse 3.01+myeclipse 3.84</P>
<P>新建一个空的web项目，</P>
<P>web root folder=webapps，</P>
<P>context root url =jsonrpc，OK。</P>
<P>（这两个值可以用默认设置，但用默认设置后面改动比较多，所以就迎合它自己的口味）</P>
<P>把解开的src和test目录放到新建项目的根目录中，webapps/jsonrpc目录下的内容拷贝到项目webapps目录中，eclipse自动编译，会报一些错误，是因为test/src中有一部分java源码未作为java文件编译，鼠标右键点击项目图标-&gt;属性-&gt;Java编译路径-&gt;资源-&gt;添加test/src目录到资源中，确定ＯＫ。</P>
<P>jsp文件没有因java文件的重新编译而更新所以还会显示一些红色的错误，就得手工让它再编译一次，鼠标右键点击项目中webapps目录-&gt;myeclipse-&gt;运行校验，ＯＫ，剩下的是一些警告信息，如果你不想看到它们，可以去程序中一个个的去掉。</P>
<P>在eclipse中发布jsonrpc、启动tomcat服务，大功告成。</P>
<P>简单的看了一下它的设计实现过，明天接着写。</P><BR><BR></DIV><img src ="http://www.blogjava.net/junctioner/aggbug/35635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-03-16 13:43 <a href="http://www.blogjava.net/junctioner/archive/2006/03/16/35635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源ETL工具－－kettle</title><link>http://www.blogjava.net/junctioner/archive/2006/03/02/33173.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 02 Mar 2006 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/03/02/33173.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/33173.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/03/02/33173.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/33173.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/33173.html</trackback:ping><description><![CDATA[在google上查到两款java的开源ETL工具<BR>Kettle（<A href="http://www.kettle.be/">http://www.kettle.be/</A>）和<BR>Octopus（<A href="http://www.enhydra.org/tech/octopus/index.html">http://www.enhydra.org/tech/octopus/index.html</A>）<BR>先看Kettle<BR><BR>下载kettle的源码（也可以下载BIN的），在eclipse中启动，出现配置Repository的小窗口，在这小窗口中配置的Repository，输入口令后老报口令错误（可能是没配置好），就直接点No Repository进入主窗口，这就开始ETL工作了。<BR><BR>待继。。。<img src ="http://www.blogjava.net/junctioner/aggbug/33173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-03-02 12:39 <a href="http://www.blogjava.net/junctioner/archive/2006/03/02/33173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再学习log4j笔记</title><link>http://www.blogjava.net/junctioner/archive/2006/02/13/30420.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Mon, 13 Feb 2006 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/02/13/30420.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/30420.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/02/13/30420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/30420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/30420.html</trackback:ping><description><![CDATA[<P>log4j，字面意思就是针对j（Java）的日志。<BR>log4j，可以记录显示Java程序运行的每一步的数据，相当于System.out.print，不过，它是以一个日志文件显示所标识的运行信息，不用在java运行显示台上看输出信息，比较方面。<BR>log4j，记录的数据，可以作为判断程序运行状态的重要依据，更多的应是查找程序运行BUG的重要依据，特别是程序已发布，不能做单步调试的情况下，它的优越性就突显出来了。<BR>引用一个对log4j的功能比较专业的描述：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">1、监视代码中变量的变化情况，周期性的记录到文件中供其他应用进行统计分析工作；<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>2、跟踪代码运行时轨迹，作为日后审计的依据；<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>3、担当集成开发环境中的调试器的作用，向文件或控制台打印代码的调试信息。<IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>
<P>以前偶尔的用过几次，但一次没形成习惯和一套良好的应用机制，自咎主要原因是对log4j掌握的还是不够，亟待提升。<BR><BR>今天就花时间找些资源研究研究。<BR><BR>在网上搜到一些文章，首先看的是IBM中国网站上的一篇技术文章（<A href="http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html">http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html</A>）讲得比较基础，也很详细，对log4j的使用讲得全面而贴切，甚利于初次学习，发表日期是2002/6/19（有点早）。<BR><BR>1、去网站（<A href="http://logging.apache.org/log4j/docs/download.html">http://logging.apache.org/log4j/docs/download.html</A><A href="http://logging.apache.org/site/binindex.cgi"></A>）下载log4j的jar包，直接下载log4j-1.2.13版链接：<A href="http://mirror.vmmatrix.net/apache/logging/log4j/1.2.13/logging-log4j-1.2.13.zip">http://mirror.vmmatrix.net/apache/logging/log4j/1.2.13/logging-log4j-1.2.13.zip</A>；<BR>2、解开log4j.jar文件放到web应用程序的WEB-INF/lib下面；<BR>3、编写文件名为<FONT face="Courier New">log4j.properties</FONT> 配置文件到java源文件的根目录中；<BR>4、在自己的程序中构建日志记录器；<BR>5、利用记录器标识要输入的信息。<BR><BR>第二步如果是在java的一般应用程序中应用log4j，则在环境变量CLASSPATH中添加一个指向log4j.jar的值。<BR>第三步把命名为<FONT face="Courier New">log4j.properties的</FONT>log4j配置文件放在java源文件目录中是一个简洁的办法，可以在程序中自定义的指定log4j的配置文件，配置文件名称和存放路径都可自定义。</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">当获得了日志记录器之后，第二步将配置Log4j环境，其语法为：&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>BasicConfigurator.configure&nbsp;()：&nbsp;自动快速地使用缺省Log4j环境。&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>PropertyConfigurator.configure&nbsp;(&nbsp;String&nbsp;configFilename)&nbsp;：读取使用Java的特性文件编写的配置文件。&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>DOMConfigurator.configure&nbsp;(&nbsp;String&nbsp;filename&nbsp;)&nbsp;：读取XML形式的配置文件。</SPAN></DIV>
<P>Log4j支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件（键=值）。下面引用的是使用Java特性文件做为配置文件的方法（不用XML解析器）：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">配置根Logger，其语法为：&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.rootLogger&nbsp;=&nbsp;[&nbsp;level&nbsp;]&nbsp;,&nbsp;appenderName,&nbsp;appenderName,&nbsp;…<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>其中，level&nbsp;是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别，优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>配置日志信息输出目的地Appender，其语法为&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.appenderName&nbsp;=&nbsp;fully.qualified.name.of.appender.class<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.appenderName.option1&nbsp;=&nbsp;value1<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>…<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.appenderName.option&nbsp;=&nbsp;valueN其中，Log4j提供的appender有以下几种：&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.ConsoleAppender（控制台），&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.FileAppender（文件），&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>配置日志信息的格式（布局），其语法为：&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.appenderName.layout&nbsp;=&nbsp;fully.qualified.name.of.layout.class<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.appenderName.layout.option1&nbsp;=&nbsp;value1<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>…<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.appenderName.layout.option&nbsp;=&nbsp;valueN其中，Log4j提供的layout有以下几种：&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.HTMLLayout（以HTML表格形式布局），&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.PatternLayout（可以灵活地指定布局模式），&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）&nbsp;</SPAN></DIV><BR>下面是一个log4j配置文件的例子（内容不含前面的行号）： 
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">log4j.rootLogger=INFO,&nbsp;<FONT color=#0000ff>A1</FONT>&nbsp;,&nbsp;<FONT color=#ff0000>R<BR></FONT></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#0000ff>A1</FONT>=org.apache.log4j.ConsoleAppender&nbsp;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#0000ff>A1</FONT>.layout=org.apache.log4j.PatternLayout&nbsp;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#0000ff>A1</FONT>.layout.ConversionPattern=%-d{yyyy-MM-dd&nbsp;HH:mm:ss}&nbsp;[%c]-[%p]&nbsp;%m%n&nbsp;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#ff0000>R</FONT>=org.apache.log4j.RollingFileAppender<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#ff0000>R</FONT>.File=$TOMCAT_HOME/logs/log4j.log<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><FONT color=#008000>##将$TOMCAT_HOME换成tomcat的安装目录,也可以指定一个存在的任意目录</FONT><BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#ff0000>R</FONT>.MaxFileSize=100KB<BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#ff0000>R</FONT>.MaxBackupIndex=1<BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#ff0000>R</FONT>.layout=org.apache.log4j.PatternLayout<BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>log4j.appender.<FONT color=#ff0000>R</FONT>.layout.ConversionPattern=%p&nbsp;%t&nbsp;%c&nbsp;-&nbsp;%m%n</SPAN></DIV><BR><BR>第1行的值INFO，表示输出INFO级以上的日志，如果设成OFF则表示不输出，A1和R是自定义的两种输出方式（可以自定义n种输出方式），其详细内容在后面有定义；<BR>第3行定义A1是输出到控制台；<BR>第7行定义R是输出到文件，并且控制文件在指定大小，超过指定大小自动按指定形式创建一个新名称的日志文件；<BR><BR>一般是以指定格式的文本输出日志，输出比较快捷，也可以定义HTML格式的日志输出，阅读方便，但稍微有点慢。<BR><BR>现在，可以象使用System.out.println一样标识程序输出信息了看一个在程序中应用log4j的简单例子。<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;org.apache.log4j.Level;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;org.apache.log4j.Logger;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;org.apache.log4j.SimpleLayout;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;org.apache.log4j.FileAppender;<BR><IMG id=Codehighlighter1_164_759_Open_Image onclick="this.style.display='none'; Codehighlighter1_164_759_Open_Text.style.display='none'; Codehighlighter1_164_759_Closed_Image.style.display='inline'; Codehighlighter1_164_759_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_164_759_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_759_Closed_Text.style.display='none'; Codehighlighter1_164_759_Open_Image.style.display='inline'; Codehighlighter1_164_759_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;simpandfile&nbsp;</SPAN><SPAN id=Codehighlighter1_164_759_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_164_759_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000>//获取log4j日志记录器</FONT><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;Logger&nbsp;logger&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Logger.getLogger(simpandfile.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">);<BR><IMG id=Codehighlighter1_271_757_Open_Image onclick="this.style.display='none'; Codehighlighter1_271_757_Open_Text.style.display='none'; Codehighlighter1_271_757_Closed_Image.style.display='inline'; Codehighlighter1_271_757_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_271_757_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_271_757_Closed_Text.style.display='none'; Codehighlighter1_271_757_Open_Image.style.display='inline'; Codehighlighter1_271_757_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;main(String&nbsp;args[])&nbsp;</SPAN><SPAN id=Codehighlighter1_271_757_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_271_757_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#008000>//新建一个日志输出样式</FONT><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleLayout&nbsp;layout&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;SimpleLayout();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileAppender&nbsp;appender&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">;<BR><IMG id=Codehighlighter1_368_442_Open_Image onclick="this.style.display='none'; Codehighlighter1_368_442_Open_Text.style.display='none'; Codehighlighter1_368_442_Closed_Image.style.display='inline'; Codehighlighter1_368_442_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_368_442_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_368_442_Closed_Text.style.display='none'; Codehighlighter1_368_442_Open_Image.style.display='inline'; Codehighlighter1_368_442_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_368_442_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_368_442_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000>&nbsp;//定义输出文件</FONT><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appender&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;FileAppender(layout,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">output1.txt</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">);<BR><IMG id=Codehighlighter1_463_464_Open_Image onclick="this.style.display='none'; Codehighlighter1_463_464_Open_Text.style.display='none'; Codehighlighter1_463_464_Closed_Image.style.display='inline'; Codehighlighter1_463_464_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_463_464_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_463_464_Closed_Text.style.display='none'; Codehighlighter1_463_464_Open_Image.style.display='inline'; Codehighlighter1_463_464_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(Exception&nbsp;e)&nbsp;</SPAN><SPAN id=Codehighlighter1_463_464_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_463_464_Open_Text><SPAN style="COLOR: #000000">{}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.addAppender(appender);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000>//设置日志输出等级为DEBUG</FONT><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.setLevel((Level)&nbsp;Level.DEBUG);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#008000>//以各种等级标识输出信息</FONT><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Here&nbsp;is&nbsp;some&nbsp;DEBUG</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Here&nbsp;is&nbsp;some&nbsp;INFO</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.warn(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Here&nbsp;is&nbsp;some&nbsp;WARN</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Here&nbsp;is&nbsp;some&nbsp;ERROR</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.fatal(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Here&nbsp;is&nbsp;some&nbsp;FATAL</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>
<P>如果定义了log4j的输出配置文件，在程序中获取日志记录器后就可以直接标识日志输出信息。<BR></P>
<P>[<FONT color=#ff0000>***</FONT>]　在判断DEBUG/INFO级别的信息是否要加入日志文件前，记录器提供isDebugEnabled()/isInfoEnabled()方法判断当前级别是否激活，这样处理减少日志处理信息时再判断当前级别是否激活消耗的资源，提高运行性能。<BR><BR>补加：<BR><BR>刚发现log4e（<A href="http://log4e.jayefem.de/index.php/Download">http://log4e.jayefem.de/index.php/Download</A>）这个eclipse的插件，它实现的功能是鼠标点击几下，就可以自动生产log标识，免去手敲的体力。<BR>至于怎么用，就很简单了，跟它的插件一样安装，装完后，在eclipse的编辑区右键菜单中会多一个log4e项，所有操作都在这里了。</P><img src ="http://www.blogjava.net/junctioner/aggbug/30420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-02-13 10:52 <a href="http://www.blogjava.net/junctioner/archive/2006/02/13/30420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jira 3.5 Enterprise EAR/WAR + mysql 安装手记</title><link>http://www.blogjava.net/junctioner/archive/2006/02/06/29679.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Mon, 06 Feb 2006 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/02/06/29679.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/29679.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/02/06/29679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/29679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/29679.html</trackback:ping><description><![CDATA[<P>前段时间很容易的就试装了jira的Professional Standalone， 写得比较简单，今天准备装一下Enterprise EAR/WAR ，写个详细一点安装手记。<BR><BR>最开始的工作自然是下载了。<BR>把zip包解压到一个目录中，展开的内容如下：<BR>edit-webapp：这个目录中放的是指定数据库类型的配置文件；<BR>etc：这个目录中存放有三个xml文件；分别是换ear/war包用的配置文件；<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;打war包的配置文件有两一个，jira.xml是通用的，tomcat-5.5-jira.xml是专为tomcat-5.5准备的。<BR>src：这是一个空目录，可以放自己添加的要编译的功能源文件；<BR>tools：这个目录中自带一个ant（如果你没有安装ant，就用得到它）；<BR>updater：为更新jira配备的一个更新工具目录；<BR>webapp：主要的程序文件目录；<BR>appendcp.bat：这个批处理文件没怎么用到；<BR>build.bat：这个批处理文件把修改过的配置文件和程序文件打成一个可发布的war/ear包；<BR>build.sh：功能同build.bat,是在linux下用的；<BR>build.xml：ant的配置文件；<BR>readme.txt：软件说明文件；<BR><BR>展开的这些东西还只是“材料”，接下来就是做一些配置并把它们打成可发布的包。<BR><BR>应用服务选用Tomcat5.0；<BR>数据库选用mysql Ver 14.7 Distrib 4.1.14 for Win32；<BR><BR>先建表空间，再分配用户指定权限，</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">create</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">database</SPAN><SPAN style="COLOR: #000000">&nbsp;jiradb;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">grant</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #808080">all</SPAN><SPAN style="COLOR: #000000">&nbsp;privileges&nbsp;</SPAN><SPAN style="COLOR: #0000ff">on</SPAN><SPAN style="COLOR: #000000">&nbsp;jiradb.</SPAN><SPAN style="COLOR: #808080">*</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">to</SPAN><SPAN style="COLOR: #000000">&nbsp;jiradbuser</SPAN><SPAN style="COLOR: #008000">@localhost</SPAN><SPAN style="COLOR: #000000">&nbsp;identified&nbsp;</SPAN><SPAN style="COLOR: #0000ff">by</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #ff0000">jira</SPAN><SPAN style="COLOR: #ff0000">'</SPAN><SPAN style="COLOR: #000000">;</SPAN></DIV><BR>做好外部了准备工作，就进行配置。<BR>接着修改<STRONG>edit-webapp\WEB-INF\classes\entityengine.xml</STRONG>，<BR>找到<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">datasource&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="defaultDS"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<EM><U>&nbsp;field-type-name</U></EM></SPAN><SPAN style="COLOR: #0000ff"><EM><U>="hsql"</U></EM></SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper-class</SPAN><SPAN style="COLOR: #0000ff">="org.ofbiz.core.entity.GenericHelperDAO"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-on-start</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-foreign-keys</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-foreign-key-indices</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-fks-on-start</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-fk-indices-on-start</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add-missing-on-start</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-indices-on-start</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>替换为<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">datasource&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="defaultDS"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<U>field-type-name</U></SPAN><SPAN style="COLOR: #0000ff"><U>="mysql"</U></SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helper-class</SPAN><SPAN style="COLOR: #0000ff">="org.ofbiz.core.entity.GenericHelperDAO"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-on-start</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-foreign-keys</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use-foreign-key-indices</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-fks-on-start</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-fk-indices-on-start</SPAN><SPAN style="COLOR: #0000ff">="false"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add-missing-on-start</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #ff0000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check-indices-on-start</SPAN><SPAN style="COLOR: #0000ff">="true"</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>再修改<STRONG>etc\jira.xml</STRONG>（如果应用服务用tomcat5.5,则修改<STRONG>etc\tomcat-5.5-jira.xml</STRONG>）<BR>找到<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">driverClassName</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">&lt;!--</SPAN><SPAN style="COLOR: #008000">&nbsp;NOTE:&nbsp;if&nbsp;you&nbsp;change&nbsp;the&nbsp;database&nbsp;type,&nbsp;you&nbsp;will&nbsp;need&nbsp;to&nbsp;change&nbsp;it&nbsp;in&nbsp;WEB-INF/classes/entityengine.xml&nbsp;</SPAN><SPAN style="COLOR: #008000">--&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><FONT color=#000000><U>org.hsqldb.jdbcDriver</U></FONT></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">url</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><FONT color=#000000><U>jdbc:hsqldb:@JIRA_HOME@/database/jiradb</U></FONT></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">username</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><U>sa</U></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">password</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>修改为<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">driverClassName</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">&lt;!--</SPAN><SPAN style="COLOR: #008000">&nbsp;NOTE:&nbsp;if&nbsp;you&nbsp;change&nbsp;the&nbsp;database&nbsp;type,&nbsp;you&nbsp;will&nbsp;need&nbsp;to&nbsp;change&nbsp;it&nbsp;in&nbsp;WEB-INF/classes/entityengine.xml&nbsp;</SPAN><SPAN style="COLOR: #008000">--&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><U>com.mysql.jdbc.Driver</U></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">url</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><U>jdbc:mysql://localhost:3306/jiradb?autoReconnect=true</U></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">username</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><U>jiradbuser</U></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">password</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><U>jira</U></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">value</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">parameter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>配置完后，就可以build一个jira的war包了。<BR>如果系统中已装有ant，则直接运行build.bat文件，没有安装的话，它会运行自带的ant。<BR><BR>build运行完后，会在当前目录生成三个目录，<BR>dist-generic：存放通用的war包，直接拷贝到应用服务的服务目录中就可以运行；<BR>dist-tomcat：存放发布到tomcat中的外部war包及配置文件；<BR>tmp：build运行过程中的临时文件目录；<BR><BR>dist-tomcat目录中，有一个war包，和对应三个tomcat版本的配置文件目录。<BR><BR>在此，拷贝<STRONG>dist-tomcat/tomcat-5/jira.xml</STRONG> 到 <STRONG>$Tomcat/conf/Catalina/localhost/<BR></STRONG>启动tomcat,在IE地址样中输入：<A href="http://localhost:8080/jira">http://localhost:8080/jira</A>；<BR>第一次运行jira，显示安装配置页面。（没有装截图软件，就不显示截图）<BR>在这个配置页面，jira会根据操作系统的语言设置，选用相应的语言包（汉包的效果也不错，不存在语言问题：）），依照着相关的提示做相应的设置就OK，唯一花时间的事，就是要在线生成一个授权码，用下载jira的用户名登录，可以获得一个援权码，填好援权码下一步。<BR>接下来是添加管理员，设置好后下一步。<BR>再接下来是邮件通知的设置，此处你可以暂时禁用邮件通知，以后也可以重新启动邮件通知。<BR>设置完成后就可以以刚才添加的管理员登录，创建BUG跟踪管理项目了。<BR><img src ="http://www.blogjava.net/junctioner/aggbug/29679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-02-06 12:01 <a href="http://www.blogjava.net/junctioner/archive/2006/02/06/29679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习python</title><link>http://www.blogjava.net/junctioner/archive/2006/01/13/27940.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Fri, 13 Jan 2006 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/01/13/27940.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/27940.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/01/13/27940.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/27940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/27940.html</trackback:ping><description><![CDATA[早就知道有这么一个东西了，一直没时间看，今天就看看。<BR>第一件事，找官网：<A href="http://www.python.org/">http://www.python.org/</A>，东西还真多，不知从哪看起。<BR>不喜欢看些介绍的东西，就看新手向导（<A href="http://wiki.python.org/moin/BeginnersGuide">Beginner's Guide</A> ），<BR>python也有它的“jdk”，最新版本是2.4.2，先下载下来再说，当！<BR>装上之后，做什么呢？<BR>发现有代码样例，怎么让它跑进来呢？<BR>找python的开发工具，一查，有好多，其中一种是eclipse+pydev的，试试这个<BR>pydev是eclipse做python开发的插件，官网是：<A href="http://pydev.sourceforge.net/">http://pydev.sourceforge.net/</A>；<BR>对应版本有很多种，我装有eclipse3.1，就当最新的，pydev0.9.8.6<BR>下载解开的文件，拷贝到eclipse的extplugin目录，新建link文件，启动eclipse，呵呵，还装好了！<BR>在IBM的网站上找到这个资料：<A href="http://www-128.ibm.com/developerworks/cn/opensource/os-ecant/#resources">http://www-128.ibm.com/developerworks/cn/opensource/os-ecant/#resources</A>，比较老，是2004年的，但可以参照一下。<BR>还是在eclipse的windows-preferences-pydev中指定一个python的编辑器（刚才下载安装python的“jdk”）。<BR>把其中的样例代码下载到项目中，还真跑起来了。<BR>也可以调试（调试运行的比较慢，可能是eclipse3.1的问题，呆会装个eclipse3.0的调试看看）<BR>现在不知道python的语法，代码看不懂，这是主要的。<BR><BR><BR><img src ="http://www.blogjava.net/junctioner/aggbug/27940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-01-13 15:44 <a href="http://www.blogjava.net/junctioner/archive/2006/01/13/27940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Centric CRM  开源的客户关系管理系统</title><link>http://www.blogjava.net/junctioner/archive/2006/01/05/26738.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 05 Jan 2006 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/01/05/26738.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/26738.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/01/05/26738.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/26738.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/26738.html</trackback:ping><description><![CDATA[官网下载：<A href="http://www.centriccrm.com/Portal.do?key=home">http://www.centriccrm.com/Portal.do?key=home</A><BR>点了下载图标后，半天没找到下载的链接，左找右找，找到一个tab，上写在download，复杂呀，还得点一下，看到下载的列表了，但点上去，还是没反应，到底是啥回事呢？发现类型是.torrent，好象是BT下载的种子，以前没用过BT,今天为了它，还得下载个BT玩玩。<BR>上网找了一个，装上，还是没反应，快晕了。<BR>再左看看，右看看，上看看，哦，要求是登录了才可以下载，注册登录吧，这才发现下载的连接是活的了。当下了种了，再才开始下载。以前听说BT是用来下载电影的，速度应很快，但怎么我今天用BT，它就不快呢，每秒才几K,才10几M的东西，得多长时间呀<BR><img src ="http://www.blogjava.net/junctioner/aggbug/26738.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-01-05 16:50 <a href="http://www.blogjava.net/junctioner/archive/2006/01/05/26738.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>选用jira</title><link>http://www.blogjava.net/junctioner/archive/2006/01/05/26644.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Thu, 05 Jan 2006 01:11:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2006/01/05/26644.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/26644.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2006/01/05/26644.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/26644.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/26644.html</trackback:ping><description><![CDATA[<P>jira现在是商业化的软件，先找个demo版看看。<BR>jira官网：<A href="http://www.atlassian.com/software/jira/">http://www.atlassian.com/software/jira/</A><BR>jira分企业版、专业版、标准版三个版本，我选专业版。<BR>每个版本又分standalone和war/ear两种发布形式，standalone是被推荐使用的，就先用它。<BR>下载完解开，从readme里找到jira的安装说明链接：<A href="http://www.atlassian.com/software/jira/docs/v3.4.2/install.html">http://www.atlassian.com/software/jira/docs/v3.4.2/install.html</A><BR>照着安装说明做，非常容易的就运行起来了。<BR><BR>装后感觉：<BR>&nbsp;&nbsp;&nbsp;1、standalone的jira中自带一个tomcat，jira的资源包通过修改一些配置文件已发布到这个tomcat中，只要运行一下startup.bat就启动了。<BR>&nbsp;&nbsp;&nbsp;2、汉化做的不全，后台控制部分还是英文。<BR>&nbsp;&nbsp;&nbsp;3、功能还是比较多呀，得花时间研究怎么用呀。<BR>&nbsp;&nbsp;&nbsp;4、安装配置的时候，未配置邮件分发服务（没仔细看怎么配置，直接选禁用邮件分发），暂缺邮件分发这一功能。<BR>&nbsp;&nbsp;&nbsp;5、产品试用期是30天的，得想法办法解决<IMG height=19 src="http://www.blogjava.net/Emoticons/regular_smile.gif" width=19 border=0>。<BR>&nbsp;&nbsp;&nbsp;6、安装的时候没有指定数据库，使用默认的hsql，可参考下面的链接更换应用数据库　<A href="http://www.atlassian.com/software/jira/docs/v3.4.2/standalone-dbconfig.html">http://www.atlassian.com/software/jira/docs/v3.4.2/standalone-dbconfig.html</A><BR>下面这个链接是讲怎么更换到oracle上的<BR><A href="/waterye/archive/2005/08/24/10959.aspx">http://www.blogjava.net/waterye/archive/2005/08/24/10959.aspx</A><BR><BR>发现商业版的用户可以获取jira源码，真是羡慕ing。</P><img src ="http://www.blogjava.net/junctioner/aggbug/26644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2006-01-05 09:11 <a href="http://www.blogjava.net/junctioner/archive/2006/01/05/26644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java和调用动态链接库</title><link>http://www.blogjava.net/junctioner/archive/2005/12/31/26195.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Sat, 31 Dec 2005 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2005/12/31/26195.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/26195.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2005/12/31/26195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/26195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/26195.html</trackback:ping><description><![CDATA[Java的运行是基于Java虚拟机的，Java虚拟机中又是一些动态链接库文件，一直不清楚它们之间是怎么样协同工作？<BR><BR>什么是动态链接库？在微软中文网站（<A href="http://support.microsoft.com/default.aspx?scid=kb;zh-cn;815065">http://support.microsoft.com/default.aspx?scid=kb;zh-cn;815065</A>）上有很清楚的介绍。<BR><STRONG>DLL 是一个包含可由多个程序同时使用的代码和数据的库。<BR><BR></STRONG>介绍jvm.dll装入过程：<A href="http://www.matrix.org.cn/resource/article/1/1650_jvm_loading_progress.html">http://www.matrix.org.cn/resource/article/1/1650_jvm_loading_progress.html</A><BR><BR>把java应用生成本地应用的介绍：<A href="http://community.borland.com/article/0,1410,20679,00.html">http://community.borland.com/article/0,1410,20679,00.html</A><img src ="http://www.blogjava.net/junctioner/aggbug/26195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2005-12-31 16:45 <a href="http://www.blogjava.net/junctioner/archive/2005/12/31/26195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT学习样例源码</title><link>http://www.blogjava.net/junctioner/archive/2005/12/31/26183.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Sat, 31 Dec 2005 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2005/12/31/26183.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/26183.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2005/12/31/26183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/26183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/26183.html</trackback:ping><description><![CDATA[<P>昨天装了SWT Designer后，摸索了半天，画出几个界面，但要让它“活”起来，还是得写一些代码，暂时没打算系统的去学习SWT，就偷懒，照别人的代码画瓢了。<BR>找到几个不错的SWT学习源码网址：<BR><A href="http://www.java2s.com/ExampleCode/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm">http://www.java2s.com/ExampleCode/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm</A><BR></P><img src ="http://www.blogjava.net/junctioner/aggbug/26183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2005-12-31 15:13 <a href="http://www.blogjava.net/junctioner/archive/2005/12/31/26183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装　SWT Designer</title><link>http://www.blogjava.net/junctioner/archive/2005/12/30/26017.html</link><dc:creator>junctioner</dc:creator><author>junctioner</author><pubDate>Fri, 30 Dec 2005 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/junctioner/archive/2005/12/30/26017.html</guid><wfw:comment>http://www.blogjava.net/junctioner/comments/26017.html</wfw:comment><comments>http://www.blogjava.net/junctioner/archive/2005/12/30/26017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/junctioner/comments/commentRss/26017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/junctioner/services/trackbacks/26017.html</trackback:ping><description><![CDATA[<P>我机子装有两个版本的eclipse，3.0.1和3.1.0<BR>经常用的是3.0.1，装上3.1.0发现它在调试运行的效率上没有3.0.1高，但它的编辑操作3.0.1方便了很多－－这方面的人性化做得比较好。用eclipse主要还是用它的调试运行，就一直没怎么用3.1.0。<BR><BR>SWT Designer主要是做界面设计的，下载匹配eclipse3.1.0的版本，看它的编辑操作是不是也很简便。<BR><BR>SWT Designer的官网：<A href="http://www.swt-designer.com/">http://www.swt-designer.com/</A><BR>下载列表网址：<A href="http://www.instantiations.com/swt-designer/download_content.html">http://www.instantiations.com/swt-designer/download_content.html</A><BR><BR>我的eclipse插件都是放在$eclipse/extplugin目录中，再到$eclipse/links目录下建一个连接配置文件，方便插拔。<BR><BR>这里有一个SWT Designer v4..1.1 的破解方法（个人使用）：<A href="/gufen/archive/2005/11/08/14184.html">http://www.blogjava.net/gufen/archive/2005/11/08/14184.html</A><BR><BR>eclipse3.0.1+swtDesigner4.2.1的，没找到破解的方法，今天做不了比较。<BR>eclipse3.1.0+swtDesigner4.2.1按上面的方法，破解成功。<BR>运行起来，使用感觉跟VB很象，非常容易的就能拖拽出一个界面<BR><BR></P><img src ="http://www.blogjava.net/junctioner/aggbug/26017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/junctioner/" target="_blank">junctioner</a> 2005-12-30 10:52 <a href="http://www.blogjava.net/junctioner/archive/2005/12/30/26017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>