<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>搬砖的</title>
    <description></description>
    <link>http://paradiseamani.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>关于 TOMCAT 的 session 的一个问题</title>
        <author>虚无的曾经</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://paradiseamani.javaeye.com">虚无的曾经</a>&nbsp;
          链接：<a href="http://paradiseamani.javaeye.com/blog/82574" style="color:red;">http://paradiseamani.javaeye.com/blog/82574</a>&nbsp;
          发表时间: 2007年05月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>近来工作中发现一个一直被我忽略的问题：在tomcat中，Session是什么时候被创建的？</p>
<p>所用 tomcat 的版本：<font face="Arial">apache-tomcat-5.5.20。</font></p>
<p>Session是维持客户端和服务器端会话的&nbsp; 实现在多个页面之间访问保持状态</p>
<p>但是是什么时候被创建的呢？</p>
<p>以前在某J2EE论坛看见数个管理员的说法：<font face="Arial">session在有客户端访问时就被创建。</font></p>
<p>这个是对是错一直没有亲自去验证。</p>
<p>测试如下：</p>
<p>创建一个say Hello的servlet，创建一个say Hello的JSP，在里面用</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span><font face="Courier New" style="BACKGROUND-COLOR: #fafafa">HttpSession session = req.getSession(false);</font></span></span> </li>
    <li class="alt"><span><span>out.print(session);&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>就可以发现，无论访问多少次的Servlet，打印出来的永远为null</p>
<p>但是访问JSP的话，就不会为null，结果为一串表示session对象的字符串。</p>
<p>PS：如果是访问的HTML页面的话，也不会有session的产生&middot;&middot;&middot;</p>
<p>再在Servlet中修改：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>HttpSession&nbsp;session&nbsp;=&nbsp;req.getSession(</span><span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>就可以发现访问Servlet的时候，session通过这个语句被创建。</p>
<p>在JSP头部加入</p>
<div class="code_title">JSP 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span>%@page&nbsp;</span><span class="attribute">session</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>%</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>就可以发现此JSP不会再主动创建session对象。</p>
<p>结论：session对象<font face="Arial">直到某服务器端程序调用</font><font face="Arial"></font><font face="Arial">这样的语句时才被创建，而在JSP中会默认调用</font>&nbsp;</p>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>HttpSession&nbsp;session&nbsp;=&nbsp;req.getSession(</span><span class="keyword">true</span><span>);&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>这个问题已经很清楚了，教训：不确定的必须自己亲自去做实验验证，不然。。。。。。</p>
          <br/>
          <span style="color:red;">
            <a href="http://paradiseamani.javaeye.com/blog/82574#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 May 2007 13:34:10 +0800</pubDate>
        <link>http://paradiseamani.javaeye.com/blog/82574</link>
        <guid>http://paradiseamani.javaeye.com/blog/82574</guid>
      </item>
      <item>
        <title>nutch 0.7.2试用</title>
        <author>虚无的曾经</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://paradiseamani.javaeye.com">虚无的曾经</a>&nbsp;
          链接：<a href="http://paradiseamani.javaeye.com/blog/59980" style="color:red;">http://paradiseamani.javaeye.com/blog/59980</a>&nbsp;
          发表时间: 2007年03月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 近来公司要求研究一下站内搜索引擎，我重点研究了nutch的使用：</p>
<p>1.先去 <font face="Arial"><a href="http://www.cygwin.com/">http://www.cygwin.com/</a> 下载个setup.exe，然后把cygwin安装好。</font></p>
<p>2.再去 <font face="Arial"><a href="http://lucene.apache.org/nutch/">http://lucene.apache.org/nutch/</a> 下载nutch，我下载了 0.7.2 版本 和 0.8.1 版本。</font></p>
<p>3.把下载到的nutch解压缩到硬盘，这里假设为 %NUTCH_HOME% 目录，在%NUTCH_HOME% 目录下新建一个 urls 文件，</p>
<p>里面写下要搜索的网址，譬如：<font face="Arial"><a href="http://www.hkex.com.hk/">http://www.hkex.com.hk/</a> 。</font></p>
<p>4.配置%NUTCH_HOME%\conf\<font face="Arial">crawl-urlfilter.txt 文件，在</font></p>
<p><font face="Arial"># accept hosts in MY.DOMAIN.NAME<br />
# +^http://([a-z0-9]*\.)*MY.DOMAIN.NAME/</font></p>
<p>下加上url过滤规则，譬如：+^<font face="Arial"><a href="http://www.hkex.com.hk/">http://<font face="Arial">([a-z0-9]*\.)*</font>hkex.com.hk/</a> 。</font></p>
<p>5.在环境变量中加入 <font face="Arial">NUTCH_JAVA_HOME = <font face="Arial">D:\jdk1.5.0_06 （指向JDK目录）。</font></font></p>
<p>6.运行cygwin，进去%NUTCH_HOME%，运行以下命令：</p>
<p><font face="Arial">&nbsp;bin/nutch crawl urls -dir hkex -depth&nbsp;8 &gt;&amp; hkex.log</font></p>
<p>-dir hkex 表示crawl到的数据的存放目录，&nbsp;-depth&nbsp;8表示crawl到url地址的层数（这里是8层），hkex.log是生成的日志。</p>
<p>7.修改tomcat的conf目录下的server.xml，改为</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">Connector</span><span>&nbsp;</span><span class="attribute">port</span><span>=</span><span class="attribute-value">&quot;8080&quot;</span><span>&nbsp;</span><span class="attribute">maxHttpHeaderSize</span><span>=</span><span class="attribute-value">&quot;8192&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxThreads</span><span>=</span><span class="attribute-value">&quot;1000&quot;</span><span>&nbsp;</span><span class="attribute">minSpareThreads</span><span>=</span><span class="attribute-value">&quot;25&quot;</span><span>&nbsp;</span><span class="attribute">maxSpareThreads</span><span>=</span><span class="attribute-value">&quot;75&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">enableLookups</span><span>=</span><span class="attribute-value">&quot;false&quot;</span><span>&nbsp;</span><span class="attribute">redirectPort</span><span>=</span><span class="attribute-value">&quot;8443&quot;</span><span>&nbsp;</span><span class="attribute">acceptCount</span><span>=</span><span class="attribute-value">&quot;100&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">connectionTimeout</span><span>=</span><span class="attribute-value">&quot;20000&quot;</span><span>&nbsp;</span><span class="attribute">disableUploadTimeout</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span>&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">URIEncoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span>&nbsp;</span><span class="attribute">useBodyEncodingForURI</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>8.把%NUTCH_HOME%下的 <font face="Arial">nutch-0.7.2..war 改名为 ROOT.war 复制到Tomcat的webapps目录下（备份Tomcat原来的</font></p>
<p><font face="Arial">ROOT文件夹），启动Tomcat，修改<font face="Arial">ROOT\WEB-INF\classes下的<font face="Arial">nutch-site.xml，改为</font></font></font></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">nutch-conf</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>searcher.dir</span><span class="tag">&lt;/</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>C:\nutch-0.7.2\hkex</span><span class="tag">&lt;/</span><span class="tag-name">value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span></span><span class="tag">&lt;/</span><span class="tag-name">nutch-conf</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>9.重启Tomcat，在 <a href="http://localhost:8080">http://localhost:8080</a> 里就可以试试搜索了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://paradiseamani.javaeye.com/blog/59980#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 Mar 2007 12:00:00 +0800</pubDate>
        <link>http://paradiseamani.javaeye.com/blog/59980</link>
        <guid>http://paradiseamani.javaeye.com/blog/59980</guid>
      </item>
      <item>
        <title>JFreeChart中文API</title>
        <author>虚无的曾经</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://paradiseamani.javaeye.com">虚无的曾经</a>&nbsp;
          链接：<a href="http://paradiseamani.javaeye.com/blog/55081" style="color:red;">http://paradiseamani.javaeye.com/blog/55081</a>&nbsp;
          发表时间: 2007年02月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">近来研究JFreeChart，收藏一些东西~~~</font></p>
<p>原文来自：</p>
<p><font face="Arial"><a href="http://amozon.javaeye.com/blog/35167">http://amozon.javaeye.com/blog/35167</a></font></p>
<p><font face="Arial">JFreeChart类：<br />
void setAntiAlias(boolean flag)&nbsp;&nbsp;&nbsp; 字体模糊边界<br />
void setBackgroundImage(Image image)&nbsp;&nbsp; 背景图片<br />
void setBackgroundImageAlignment(int alignment)&nbsp; 背景图片对齐方式（参数常量在org.jfree.ui.Align类中定义）<br />
void setBackgroundImageAlpha(float alpha)&nbsp; 背景图片透明度（0.0～1.0）<br />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp; 背景色<br />
void setBorderPaint(Paint paint)&nbsp;&nbsp; 边界线条颜色<br />
void setBorderStroke(Stroke stroke)&nbsp;&nbsp; 边界线条笔触<br />
void setBorderVisible(boolean visible)&nbsp;&nbsp; 边界线条是否可见</font></p>
<p><font face="Arial">-----------------------------------------------------------------------------------------------------------</font></p>
<p><font face="Arial">TextTitle类：<br />
void setFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp; 标题字体<br />
void setPaint(Paint paint)&nbsp;&nbsp;&nbsp; 标题字体颜色<br />
void setText(String text)&nbsp;&nbsp;&nbsp; 标题内容</font></p>
<p><font face="Arial">-----------------------------------------------------------------------------------------------------------</font></p>
<p><font face="Arial">StandardLegend(Legend)类：<br />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp; 图示背景色<br />
void setTitle(String title)&nbsp;&nbsp;&nbsp; 图示标题内容<br />
void setTitleFont(Font font)&nbsp;&nbsp;&nbsp; 图示标题字体<br />
void setBoundingBoxArcWidth(int arcWidth)&nbsp; 图示边界圆角宽<br />
void setBoundingBoxArcHeight(int arcHeight)&nbsp; 图示边界圆角高<br />
void setOutlinePaint(Paint paint)&nbsp;&nbsp; 图示边界线条颜色<br />
void setOutlineStroke(Stroke stroke)&nbsp;&nbsp; 图示边界线条笔触<br />
void setDisplaySeriesLines(boolean flag)&nbsp; 图示项是否显示横线（折线图有效）<br />
void setDisplaySeriesShapes(boolean flag)&nbsp; 图示项是否显示形状（折线图有效）<br />
void setItemFont(Font font)&nbsp;&nbsp;&nbsp; 图示项字体<br />
void setItemPaint(Paint paint)&nbsp;&nbsp;&nbsp; 图示项字体颜色<br />
void setAnchor(int anchor)&nbsp;&nbsp;&nbsp; 图示在图表中的显示位置（参数常量在Legend类中定义）</font></p>
<p><font face="Arial">-----------------------------------------------------------------------------------------------------------</font></p>
<p><font face="Arial">Axis类：<br />
void setVisible(boolean flag)&nbsp;&nbsp;&nbsp; 坐标轴是否可见<br />
void setAxisLinePaint(Paint paint)&nbsp;&nbsp; 坐标轴线条颜色（3D轴无效）<br />
void setAxisLineStroke(Stroke stroke)&nbsp;&nbsp; 坐标轴线条笔触（3D轴无效）<br />
void setAxisLineVisible(boolean visible)&nbsp; 坐标轴线条是否可见（3D轴无效）<br />
void setFixedDimension(double dimension)&nbsp; （用于复合表中对多坐标轴的设置）<br />
void setLabel(String label)&nbsp;&nbsp;&nbsp; 坐标轴标题<br />
void setLabelFont(Font font)&nbsp;&nbsp;&nbsp; 坐标轴标题字体<br />
void setLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp; 坐标轴标题颜色<br />
void setLabelAngle(double angle)`&nbsp;&nbsp; 坐标轴标题旋转角度（纵坐标可以旋转）<br />
void setTickLabelFont(Font font)&nbsp;&nbsp; 坐标轴标尺值字体<br />
void setTickLabelPaint(Paint paint)&nbsp;&nbsp; 坐标轴标尺值颜色<br />
void setTickLabelsVisible(boolean flag)&nbsp;&nbsp; 坐标轴标尺值是否显示<br />
void setTickMarkPaint(Paint paint)&nbsp;&nbsp; 坐标轴标尺颜色<br />
void setTickMarkStroke(Stroke stroke)&nbsp;&nbsp; 坐标轴标尺笔触<br />
void setTickMarksVisible(boolean flag)&nbsp;&nbsp; 坐标轴标尺是否显示</font></p>
<p><font face="Arial">ValueAxis(Axis)类：<br />
void setAutoRange(boolean auto)&nbsp;&nbsp;&nbsp; 自动设置数据轴数据范围<br />
void setAutoRangeMinimumSize(double size)&nbsp; 自动设置数据轴数据范围时数据范围的最小跨度<br />
void setAutoTickUnitSelection(boolean flag)&nbsp; 数据轴的数据标签是否自动确定（默认为true）<br />
void setFixedAutoRange(double length)&nbsp;&nbsp; 数据轴固定数据范围（设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围）<br />
void setInverted(boolean flag)&nbsp;&nbsp;&nbsp; 数据轴是否反向（默认为false）<br />
void setLowerMargin(double margin)&nbsp;&nbsp; 数据轴下（左）边距<br />
void setUpperMargin(double margin)&nbsp;&nbsp; 数据轴上（右）边距<br />
void setLowerBound(double min)&nbsp;&nbsp;&nbsp; 数据轴上的显示最小值<br />
void setUpperBound(double max)&nbsp;&nbsp;&nbsp; 数据轴上的显示最大值<br />
void setPositiveArrowVisible(boolean visible)&nbsp; 是否显示正向箭头（3D轴无效）<br />
void setNegativeArrowVisible(boolean visible)&nbsp; 是否显示反向箭头（3D轴无效）<br />
void setVerticalTickLabels(boolean flag)&nbsp; 数据轴数据标签是否旋转到垂直<br />
void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签（可以只显示整数标签，需要将AutoTickUnitSelection设false）</font></p>
<p><font face="Arial">NumberAxis(ValueAxis)类：<br />
void setAutoRangeIncludesZero(boolean flag)&nbsp; 是否强制在自动选择的数据范围中包含0<br />
void setAutoRangeStickyZero(boolean flag)&nbsp; 是否强制在整个数据轴中包含0，即使0不在数据范围中<br />
void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式<br />
void setTickUnit(NumberTickUnit unit)&nbsp;&nbsp; 数据轴的数据标签（需要将AutoTickUnitSelection设false）</font></p>
<p><font face="Arial">DateAxis(ValueAxis)类：<br />
void setMaximumDate(Date maximumDate)&nbsp;&nbsp; 日期轴上的最小日期<br />
void setMinimumDate(Date minimumDate)&nbsp;&nbsp; 日期轴上的最大日期<br />
void setRange(Date lower,Date upper)&nbsp;&nbsp; 日期轴范围<br />
void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式<br />
void setTickUnit(DateTickUnit unit)&nbsp;&nbsp; 日期轴的日期标签（需要将AutoTickUnitSelection设false）<br />
void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置（参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义）</font></p>
<p><font face="Arial">CategoryAxis(Axis)类：<br />
void setCategoryMargin(double margin)&nbsp;&nbsp; 分类轴边距<br />
void setLowerMargin(double margin)&nbsp;&nbsp; 分类轴下（左）边距<br />
void setUpperMargin(double margin)&nbsp;&nbsp; 分类轴上（右）边距<br />
void setVerticalCategoryLabels(boolean flag)&nbsp; 分类轴标题是否旋转到垂直<br />
void setMaxCategoryLabelWidthRatio(float ratio)&nbsp; 分类轴分类标签的最大宽度</font></p>
<p><font face="Arial">-----------------------------------------------------------------------------------------------------------<br />
</font></p>
<p><font face="Arial">Plot类：<br />
void setBackgroundImage(Image image)&nbsp;&nbsp; 数据区的背景图片<br />
void setBackgroundImageAlignment(int alignment)&nbsp; 数据区的背景图片对齐方式（参数常量在org.jfree.ui.Align类中定义）<br />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp; 数据区的背景图片背景色<br />
void setBackgroundAlpha(float alpha)&nbsp;&nbsp; 数据区的背景透明度（0.0～1.0）<br />
void setForegroundAlpha(float alpha)&nbsp;&nbsp; 数据区的前景透明度（0.0～1.0）<br />
void setDataAreaRatio(double ratio)&nbsp;&nbsp; 数据区占整个图表区的百分比<br />
void setOutLinePaint(Paint paint)&nbsp;&nbsp; 数据区的边界线条颜色<br />
void setOutLineStroke(Stroke stroke)&nbsp;&nbsp; 数据区的边界线条笔触<br />
void setNoDataMessage(String message)&nbsp;&nbsp; 没有数据时显示的消息<br />
void setNoDataMessageFont(Font font)&nbsp;&nbsp; 没有数据时显示的消息字体<br />
void setNoDataMessagePaint(Paint paint)&nbsp;&nbsp; 没有数据时显示的消息颜色</font></p>
<p><font face="Arial">CategoryPlot(Plot)类：<br />
void setDataset(CategoryDataset dataset)&nbsp; 数据区的2维数据表<br />
void setColumnRenderingOrder(SortOrder order)&nbsp; 数据分类的排序方式<br />
void setAxisOffset(Spacer offset)&nbsp;&nbsp; 坐标轴到数据区的间距<br />
void setOrientation(PlotOrientation orientation) 数据区的方向（PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL）<br />
void setDomainAxis(CategoryAxis axis)&nbsp;&nbsp; 数据区的分类轴<br />
void setDomainAxisLocation(AxisLocation location) 分类轴的位置（参数常量在org.jfree.chart.axis.AxisLocation类中定义）<br />
void setDomainGridlinesVisible(boolean visible)&nbsp; 分类轴网格是否可见<br />
void setDomainGridlinePaint(Paint paint)&nbsp; 分类轴网格线条颜色<br />
void setDomainGridlineStroke(Stroke stroke)&nbsp; 分类轴网格线条笔触<br />
void setRangeAxis(ValueAxis axis)&nbsp;&nbsp; 数据区的数据轴<br />
void setRangeAxisLocation(AxisLocation location) 数据轴的位置（参数常量在org.jfree.chart.axis.AxisLocation类中定义）<br />
void setRangeGridlinesVisible(boolean visible)&nbsp; 数据轴网格是否可见<br />
void setRangeGridlinePaint(Paint paint)&nbsp;&nbsp; 数据轴网格线条颜色<br />
void setRangeGridlineStroke(Stroke stroke)&nbsp; 数据轴网格线条笔触<br />
void setRenderer(CategoryItemRenderer renderer)&nbsp; 数据区的表示者（详见Renderer组）<br />
void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释<br />
void addRangeMarker(Marker marker,Layer layer)&nbsp; 给数据区加一个数值范围区域</font></p>
<p><font face="Arial">PiePlot(Plot)类：<br />
void setDataset(PieDataset dataset)&nbsp;&nbsp; 数据区的1维数据表<br />
void setIgnoreNullValues(boolean flag)&nbsp;&nbsp; 忽略无值的分类<br />
void setCircular(boolean flag)&nbsp;&nbsp;&nbsp; 饼图是否一定是正圆<br />
void setStartAngle(double angle)&nbsp;&nbsp; 饼图的初始角度<br />
void setDirection(Rotation direction)&nbsp;&nbsp; 饼图的旋转方向<br />
void setExplodePercent(int section,double percent) 抽取的那块（1维数据表的分类下标）以及抽取出来的距离（0.0～1.0），3D饼图无效<br />
void setLabelBackgroundPaint(Paint paint)&nbsp; 分类标签的底色<br />
void setLabelFont(Font font)&nbsp;&nbsp;&nbsp; 分类标签的字体<br />
void setLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp; 分类标签的字体颜色<br />
void setLabelLinkMargin(double margin)&nbsp;&nbsp; 分类标签与图的连接线边距<br />
void setLabelLinkPaint(Paint paint)&nbsp;&nbsp; 分类标签与图的连接线颜色<br />
void setLabelLinkStroke(Stroke stroke)&nbsp;&nbsp; 分类标签与图的连接线笔触<br />
void setLabelOutlinePaint(Paint paint)&nbsp;&nbsp; 分类标签边框颜色<br />
void setLabelOutlineStroke(Paint paint)&nbsp;&nbsp; 分类标签边框笔触<br />
void setLabelShadowPaint(Paint paint)&nbsp;&nbsp; 分类标签阴影颜色<br />
void setMaximumLabelWidth(double width)&nbsp;&nbsp; 分类标签的最大长度（0.0～1.0）<br />
void setPieIndex(int index)&nbsp;&nbsp;&nbsp; 饼图的索引（复合饼图中用到）<br />
void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色<br />
void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触<br />
void setSectionPaint(int section,Paint paint)&nbsp; 指定分类饼的颜色<br />
void setShadowPaint(Paint paint)&nbsp;&nbsp; 饼图的阴影颜色<br />
void setShadowXOffset(double offset)&nbsp;&nbsp; 饼图的阴影相对图的水平偏移<br />
void setShadowYOffset(double offset)&nbsp;&nbsp; 饼图的阴影相对图的垂直偏移<br />
void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式，设置成null则整个标签包括连接线都不显示<br />
void setToolTipGenerator(PieToolTipGenerator generator)&nbsp; MAP中鼠标移上的显示格式<br />
void setURLGenerator(PieURLGenerator generator)&nbsp;&nbsp; MAP中钻取链接格式</font></p>
<p><font face="Arial">PiePlot3D(PiePlot)类：<br />
void setDepthFactor(double factor)&nbsp;&nbsp; 3D饼图的Z轴高度（0.0～1.0）</font></p>
<p><font face="Arial">MultiplePiePlot(Plot)类：<br />
void setLimit(double limit)&nbsp;&nbsp;&nbsp; 每个饼图之间的数据关联（详细比较复杂）&nbsp;&nbsp; <br />
void setPieChart(JFreeChart pieChart)&nbsp;&nbsp; 每个饼图的显示方式（见JFreeChart类个PiePlot类）</font></p>
<p><font face="Arial">-----------------------------------------------------------------------------------------------------------<br />
</font></p>
<p><font face="Arial">AbstractRenderer类：<br />
void setItemLabelAnchorOffset(double offset)&nbsp;&nbsp;&nbsp;&nbsp; 数据标签的与数据点的偏移<br />
void setItemLabelsVisible(boolean visible)&nbsp;&nbsp;&nbsp;&nbsp; 数据标签是否可见<br />
void setItemLabelFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据标签的字体<br />
void setItemLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据标签的字体颜色<br />
void setItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp;&nbsp; 数据标签位置<br />
void setPositiveItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp; 正数标签位置<br />
void setNegativeItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp; 负数标签位置<br />
void setOutLinePaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图形边框的线条颜色<br />
void setOutLineStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图形边框的线条笔触<br />
void setPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有分类图形的颜色<br />
void setShape(Shape shape)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有分类图形的形状（如折线图的点）<br />
void setStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有分类图形的笔触（如折线图的线）<br />
void setSeriesItemLabelsVisible(int series,boolean visible)&nbsp;&nbsp; 指定分类的数据标签是否可见<br />
void setSeriesItemLabelFont(int series,Font font)&nbsp;&nbsp;&nbsp; 指定分类的数据标签的字体<br />
void setSeriesItemLabelPaint(int series,Paint paint)&nbsp;&nbsp;&nbsp; 指定分类的数据标签的字体颜色<br />
void setSeriesItemLabelPosition(int series,ItemLabelPosition position)&nbsp; 数据标签位置<br />
void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置<br />
void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置<br />
void setSeriesOutLinePaint(int series,Paint paint)&nbsp;&nbsp;&nbsp; 指定分类的图形边框的线条颜色<br />
void setSeriesOutLineStroke(int series,Stroke stroke)&nbsp;&nbsp;&nbsp; 指定分类的图形边框的线条笔触<br />
void setSeriesPaint(int series,Paint paint)&nbsp;&nbsp;&nbsp;&nbsp; 指定分类图形的颜色<br />
void setSeriesShape(int series,Shape shape)&nbsp;&nbsp;&nbsp;&nbsp; 指定分类图形的形状（如折线图的点）<br />
void setSeriesStroke(int series,Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp; 指定分类图形的笔触（如折线图的线）</font></p>
<p><font face="Arial">AbstractCategoryItemRenderer(AbstractRenderer)类：<br />
void setLabelGenerator(CategoryLabelGenerator generator)&nbsp;&nbsp; 数据标签的格式<br />
void setToolTipGenerator(CategoryToolTipGenerator generator)&nbsp;&nbsp; MAP中鼠标移上的显示格式<br />
void setItemURLGenerator(CategoryURLGenerator generator)&nbsp;&nbsp; MAP中钻取链接格式<br />
void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式<br />
void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式<br />
void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式</font></p>
<p><font face="Arial">BarRenderer(AbstractCategoryItemRenderer)类：<br />
void setDrawBarOutline(boolean draw)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否画图形边框<br />
void setItemMargin(double percent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个BAR之间的间隔<br />
void setMaxBarWidth(double percent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个BAR的最大宽度<br />
void setMinimumBarLength(double min)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最短的BAR长度，避免数值太小而显示不出<br />
void setPositiveItemLabelPositionFallback(ItemLabelPosition position)&nbsp; 无法在BAR中显示的正数标签位置<br />
void setNegativeItemLabelPositionFallback(ItemLabelPosition position)&nbsp; 无法在BAR中显示的负数标签位置</font></p>
<p><font face="Arial">BarRenderer3D(BarRenderer)类：<br />
void setWallPaint(Paint paint)&nbsp;&nbsp;&nbsp; 3D坐标轴的墙体颜色</font></p>
<p><font face="Arial">StackedBarRenderer(BarRenderer)类：<br />
没有特殊的设置</font></p>
<p><font face="Arial">StackedBarRenderer3D(BarRenderer3D)类：<br />
没有特殊的设置</font></p>
<p><font face="Arial">GroupedStackedBarRenderer(StackedBarRenderer)类：<br />
void setSeriesToGroupMap(KeyToGroupMap map)&nbsp; 将分类自由的映射成若干个组（KeyToGroupMap.mapKeyToGroup(series,group)）</font></p>
<p><font face="Arial">LayeredBarRenderer(BarRenderer)类：<br />
void setSeriesBarWidth(int series,double width)&nbsp; 设定每个分类的宽度（注意设置不要使某分类被覆盖）</font></p>
<p><font face="Arial">WaterfallBarRenderer(BarRenderer)类：<br />
void setFirstBarPaint(Paint paint)&nbsp;&nbsp; 第一个柱图的颜色<br />
void setLastBarPaint(Paint paint)&nbsp;&nbsp; 最后一个柱图的颜色<br />
void setPositiveBarPaint(Paint paint)&nbsp;&nbsp; 正值柱图的颜色<br />
void setNegativeBarPaint(Paint paint)&nbsp;&nbsp; 负值柱图的颜色</font></p>
<p><font face="Arial">IntervalBarRenderer(BarRenderer)类：<br />
需要传IntervalCategoryDataset作为数据源</font></p>
<p><font face="Arial">GanttBarRenderer(IntervalBarRenderer)类：<br />
void setCompletePaint(Paint paint)&nbsp;&nbsp; 完成进度颜色<br />
void setIncompletePaint(Paint paint)&nbsp;&nbsp; 未完成进度颜色<br />
void setStartPercent(double percent)&nbsp;&nbsp; 设置进度条在整条中的起始位置（0.0～1.0）<br />
void setEndPercent(double percent)&nbsp;&nbsp; 设置进度条在整条中的结束位置（0.0～1.0）</font></p>
<p><font face="Arial">StatisticBarRenderer(BarRenderer)类：<br />
需要传StatisticCategoryDataset作为数据源</font></p>
<p><font face="Arial">LineAndShapeRenderer(AbstractCategoryItemRenderer)类：<br />
void setDrawLines(boolean draw)&nbsp;&nbsp;&nbsp; 是否折线的数据点之间用线连<br />
void setDrawShapes(boolean draw)&nbsp;&nbsp; 是否折线的数据点根据分类使用不同的形状<br />
void setShapesFilled(boolean filled)&nbsp;&nbsp; 所有分类是否填充数据点图形<br />
void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形<br />
void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框</font></p>
<p><font face="Arial">LevelRenderer(AbstractCategoryItemRenderer)类：<br />
void setItemMargin(double percent)&nbsp;&nbsp; 每个分类之间的间隔<br />
void setMaxItemWidth(double percent)&nbsp;&nbsp; 每个分类的最大宽度</font></p>
<p><font face="Arial">CategoryStepRenderer(AbstractCategoryItemRenderer)类：<br />
void setStagger(boolean shouldStagger)&nbsp;&nbsp; 不同分类的图是否交错</font></p>
<p><font face="Arial">MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类：<br />
void setDrawLines(boolean drawLines)&nbsp;&nbsp; 是否在每个分类线间画连接线<br />
void setGroupPaint(Paint groupPaint)&nbsp;&nbsp; 一组图形连接线的颜色<br />
void setGroupStroke(Stroke groupStroke)&nbsp;&nbsp; 一组图形连接线的笔触<br />
void setMaxIcon(Icon maxIcon)&nbsp;&nbsp;&nbsp; 最大值的ICON<br />
void setMinIcon(Icon minIcon)&nbsp;&nbsp;&nbsp; 最小值的ICON<br />
void setObjectIcon(Icon objectIcon)&nbsp;&nbsp; 所有值的ICON</font></p>
<p><font face="Arial">AreaRender(AbstractCategoryItemRenderer)类：<br />
没有特殊的设置</font></p>
<p><font face="Arial">StackedAreaRender(AreaRender)类：<br />
没有特殊的设置</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://paradiseamani.javaeye.com/blog/55081#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 Feb 2007 15:11:10 +0800</pubDate>
        <link>http://paradiseamani.javaeye.com/blog/55081</link>
        <guid>http://paradiseamani.javaeye.com/blog/55081</guid>
      </item>
      <item>
        <title>Proxy模式</title>
        <author>虚无的曾经</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://paradiseamani.javaeye.com">虚无的曾经</a>&nbsp;
          链接：<a href="http://paradiseamani.javaeye.com/blog/54462" style="color:red;">http://paradiseamani.javaeye.com/blog/54462</a>&nbsp;
          发表时间: 2007年02月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>快放假了&middot;&middot;&middot;难得空闲&middot;&middot;&middot;整理一下工作中常用的模式放上来&middot;&middot;&middot;</p><div class="code_title">定义所需要的接口：</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.xxx; &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;Artist&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;show(); &nbsp;&nbsp;</span> </li><li class="alt"><span>}&nbsp;&nbsp;</span> </li></ol></div><div class="code_title">实现该接口的类：</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.xxx; &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Star&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Artist{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;name&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;String&nbsp;action&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getAction()&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;action; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setAction(String&nbsp;action)&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.action&nbsp;=&nbsp;action; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;String&nbsp;getName()&nbsp;{ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;name; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setName(String&nbsp;name)&nbsp;{ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.name&nbsp;=&nbsp;name; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;show()&nbsp;{ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;+&nbsp;</span><span class="string">&quot;&nbsp;&nbsp;&nbsp;&quot;</span><span>&nbsp;+&nbsp;action); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>}&nbsp;&nbsp;</span> </li></ol></div><div class="code_title">代理类：</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.xxx; &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="keyword">import</span><span>&nbsp;java.lang.reflect.InvocationHandler; &nbsp;&nbsp;</span> </li><li><span class="keyword">import</span><span>&nbsp;java.lang.reflect.Method; &nbsp;&nbsp;</span> </li><li class="alt"><span class="keyword">import</span><span>&nbsp;java.lang.reflect.Proxy; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;AProxy&nbsp;</span><span class="keyword">implements</span><span>&nbsp;InvocationHandler{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;Object&nbsp;delegate&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;bind(Object&nbsp;delegate){ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.delegate&nbsp;=&nbsp;delegate; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;Proxy.newProxyInstance(delegate.getClass().getClassLoader(),&nbsp;delegate.getClass().getInterfaces(),&nbsp;</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;Object&nbsp;invoke(Object&nbsp;obj,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Throwable&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;签约&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result&nbsp;=&nbsp;method.invoke(delegate,&nbsp;args); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;唱完了新闻发布会&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;result; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>} &nbsp;&nbsp;</span> </li></ol></div><div class="code_title">测试类：</div><div class="dp-highlighter"><ol class="dp-j"><li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.xxx; &nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;</span> </li><li class="alt"><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestMain&nbsp;{ &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String&nbsp;[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AProxy&nbsp;a&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;AProxy(); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Star&nbsp;star&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Star(); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Star)star).setName(</span><span class="string">&quot;刘德华&quot;</span><span>); &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Star)star).setAction(</span><span class="string">&quot;唱歌&quot;</span><span>); &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Artist&nbsp;artist&nbsp;=&nbsp;(Artist)&nbsp;a.bind(star);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;artist.show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li><li class="alt"><span>} &nbsp;&nbsp;</span> </li></ol></div><p>运行结果：</p><p><span style="font-family: Arial">签约<br />刘德华&nbsp;&nbsp; 唱歌<br />唱完了新闻发布会<br /></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://paradiseamani.javaeye.com/blog/54462#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 Feb 2007 14:58:12 +0800</pubDate>
        <link>http://paradiseamani.javaeye.com/blog/54462</link>
        <guid>http://paradiseamani.javaeye.com/blog/54462</guid>
      </item>
      <item>
        <title>Timesten6.0试用手记</title>
        <author>虚无的曾经</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://paradiseamani.javaeye.com">虚无的曾经</a>&nbsp;
          链接：<a href="http://paradiseamani.javaeye.com/blog/53242" style="color:red;">http://paradiseamani.javaeye.com/blog/53242</a>&nbsp;
          发表时间: 2007年02月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>近来公司老板看了别个公司的图表系统&middot;&middot;&middot;</p>
<p>我也去看了一下，确实还可以，HTTP请求从发送到图片生成再返回到客户端只耗时不到600MS&middot;&middot;&middot;</p>
<p>有兴趣看看的可以去恒生银行的网站上看看&middot;&middot;&middot;</p>
<p>于是嫌公司原来的图表系统效率太低&middot;&middot;&middot;（原来那个确实太破了，连我看了都无语&middot;&middot;&middot;）</p>
<p>然后要求我们筹备开发一个新的图表系统，性能不能比恒生银行网站上的那个差&middot;&middot;&middot;</p>
<p>公司图表的数据是来自香港联交所的股票交易数据&middot;&middot;&middot;在香港联交所开市的时候&middot;&middot;&middot;几乎每秒都有新数据&middot;&middot;&middot;</p>
<p>而且数据量比较大&middot;&middot;&middot;不完全统计下&middot;&middot;&middot;一个年交易记录可以达到88万条&middot;&middot;&middot;</p>
<p>筹备过程中，定下来三个方案：</p>
<p>1.JAVA程序接收来自联交所的交易数据，并将数据写到oracle数据库中（公司用的10G），然后每次客户请求的时候都通过数</p>
<p>据库连接池访问数据库，取出所需数据来画图。</p>
<p>2.和前一个方案相比加多了一个cache，将股票数据放到cache中，画图时直接读取cache来取得数据，但是要维持cache和数</p>
<p>据库数据的一致，必须外加一个更新数据库的同时也更新cache的维护程序。</p>
<p>3.利用Timesten内存数据库，这样就省了我们自己去维护cache的工作。</p>
<p>方案1和方案2就不多说了&middot;&middot;&middot;由于Timesten的说明极具吸引力&middot;&middot;&middot;我把重点放在了Timesten6.0上：</p>
<p>首先从<font face="Arial"><a href="http://www.oracle.com/technology/global/cn/documentation/timesten_doc.html">http://www.oracle.com/technology/global/cn/documentation/timesten_doc.html</a>获得Timesten6.0&middot;&middot;&middot;</font></p>
<p>这东西如果用于商用的话据说是收费的&middot;&middot;&middot;</p>
<p>上面网址有几乎有着Timesten的所有文档&middot;&middot;&middot;但我一直没有找到Timesten的API&middot;&middot;&middot;</p>
<p>在Windows下安装Timesten&middot;&middot;&middot;有比较完善的向导&middot;&middot;&middot;这里几乎没有什么需要配置的&middot;&middot;&middot;</p>
<p>所需要的环境变量在安装过程中也会自动配置好&middot;&middot;&middot;</p>
<p>当然写JAVA程序时还是要导入%Timesten_home%下一个lib目录的jar包了&middot;&middot;&middot;</p>
<p>在使用过程中觉得最诡秘的还是DSN的设置&middot;&middot;&middot;按照<font face="Arial">operations.pdf里的步骤来设置是可能出错的&middot;&middot;&middot;</font></p>
<p>后来浏览了下几个博客&middot;&middot;&middot;设置DSN的时候初始密码还是设置为空吧&middot;&middot;&middot;</p>
<p>这样可以保证连接成功&middot;&middot;&middot;</p>
<p>连接成功后&middot;&middot;&middot;再在ttisql里创建所需用户&middot;&middot;&middot;然后exit退出&middot;&middot;&middot;再回到DSN里设置好密码&middot;&middot;&middot;</p>
<p>这样就可以确保100%成功了&middot;&middot;&middot;</p>
<p>然后登陆Timesten自带的Cache Connect to Oracle cahe Administrator&middot;&middot;&middot;</p>
<p>在里面创建所需要的GROUP&middot;&middot;&middot;比在命令行创建方便快捷多了&middot;&middot;&middot;而且不容易出错&middot;&middot;&middot;</p>
<p>创建好GROUP后&middot;&middot;&middot;可以在ttisql里面select `````了&middot;&middot;&middot;看看你需要的表有没有被复制过来&middot;&middot;&middot;</p>
<p>这里需要提一下DSN的设置&middot;&middot;&middot;DataSize设置过小的时候&middot;&middot;&middot;复制大量数据是会失败的&middot;&middot;&middot;</p>
<p>设置成功之后&middot;&middot;&middot;可以写JAVA程序了&middot;&middot;&middot;</p>
<p>应用数据源去连接Timesten&middot;&middot;&middot;发现速度不是快了一点点&middot;&middot;&middot;</p>
<p>目前继续测试中&middot;&middot;&middot;</p>
<p>郁闷的是&middot;&middot;&middot;内存占用太大了&middot;&middot;&middot;&middot;</p>
<p>&nbsp;在研究Timesten的时候，光顾了两个博客：</p>
<p><font face="Arial"><a href="http://tomszrp.itpub.net/">http://tomszrp.itpub.net/</a> 和</font><font face="Arial"><a href="http://yangtingkun.itpub.net/">http://yangtingkun.itpub.net/</a></font></p>
<p>这两个博客都很不错，让我学到不少东西</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://paradiseamani.javaeye.com/blog/53242#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 Feb 2007 16:59:00 +0800</pubDate>
        <link>http://paradiseamani.javaeye.com/blog/53242</link>
        <guid>http://paradiseamani.javaeye.com/blog/53242</guid>
      </item>
      <item>
        <title>windows下的MySQL数据库Replication设置</title>
        <author>虚无的曾经</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://paradiseamani.javaeye.com">虚无的曾经</a>&nbsp;
          链接：<a href="http://paradiseamani.javaeye.com/blog/49636" style="color:red;">http://paradiseamani.javaeye.com/blog/49636</a>&nbsp;
          发表时间: 2007年01月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>近来公司的一个项目要求<font face="Arial">MySQL数据库之间做一个<font face="Arial">Replication设置&middot;&middot;&middot;</font></font></p>
<p>浏览了MySQL的文档和网上的各文章之后，设置成功，具体设置如下：</p>
<p>MySQL数据库版本：<font face="Arial">mysql-5.0.27-win32</font></p>
<p>假设现在有两台电脑上分别安装了<font face="Arial">mysql-5.0.27-win32，电脑A（192.168.1.189），电脑B（192.168.1.7）&middot;&middot;&middot;</font></p>
<p>主从模式：A为MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B为SLAVE</p>
<p>首先关闭A上的MySQL服务，修改A上的my.ini配置文件，添加：</p>
<p><font color="#ff0000">server-id = 1</font></p>
<p><font color="#ff0000">log-bin</font></p>
<p>&nbsp;#replicationdatabase为要replication的数据库名，如果有多个数据库需要replication可以有多行设置，注意大小写敏感</p>
<p><font color="#ff0000">binlog-do-db = replicationdatabase</font></p>
<p>启动A上的MySQL数据库，新建需要replication的数据库</p>
<p><font color="#ff0000">create database replicationdatabase;</font></p>
<p>新建用于replication的帐户</p>
<p><font color="#ff0000">grant file,select,replication slave on *.* to </font><a href="mailto:'reper'@'192.168.1.7'"><font color="#ff0000">'reper'@'192.168.1.7'</font></a><font color="#ff0000">&nbsp;identified by 'rep';</font></p>
<p>A设置完毕。。</p>
<p>&nbsp;</p>
<p>关闭B上的MySQL服务，修改B上的my.ini配置文件，添加：</p>
<p><font color="#ff0000">server-id = 2</font></p>
<p><font color="#ff0000">master-host = 192.168.1.189</font></p>
<p><font color="#ff0000">master-user = reper</font></p>
<p><font color="#ff0000">master-password = rep</font></p>
<p><font color="#ff0000">master-port = 3306</font></p>
<p><font color="#ff0000">master-connect-retry = 10</font></p>
<p>&nbsp;#replicationdatabase为要replication的数据库名，如果有多个数据库需要replication可以有多行设置，注意大小写敏感</p>
<p><font color="#ff0000">replicate-do-db = replicationdatabase</font></p>
<p>B设置完毕，重启MySQL服务，新建需要replication的数据库</p>
<p><font color="#ff0000">create database replicationdatabase;</font></p>
<p>#开启slave</p>
<p>start slave;</p>
<p>#查看slave状态</p>
<p>show slave status;</p>
<p>设置成功。</p>
          <br/>
          <span style="color:red;">
            <a href="http://paradiseamani.javaeye.com/blog/49636#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 24 Jan 2007 10:00:09 +0800</pubDate>
        <link>http://paradiseamani.javaeye.com/blog/49636</link>
        <guid>http://paradiseamani.javaeye.com/blog/49636</guid>
      </item>
  </channel>
</rss>