亚洲综合色在线观看亚洲,午夜亚洲国产成人不卡在线,亚洲avav天堂av在线网毛片http://www.tkk7.com/zhyiwww/category/8511.html用平實的筆,記錄編程路上的點點滴滴………zh-cnFri, 17 Oct 2014 05:45:48 GMTFri, 17 Oct 2014 05:45:48 GMT60spring framework 各版本源碼下載地址http://www.tkk7.com/zhyiwww/archive/2014/10/17/418809.htmlzhyiwwwzhyiwwwFri, 17 Oct 2014 01:04:00 GMThttp://www.tkk7.com/zhyiwww/archive/2014/10/17/418809.htmlhttp://www.tkk7.com/zhyiwww/comments/418809.htmlhttp://www.tkk7.com/zhyiwww/archive/2014/10/17/418809.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/418809.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/418809.html現在spring的源碼下載地址真是不好找,這次終于找到了。記錄一下,以幫助需要的朋友。

https://github.com/spring-projects/spring-framework/tags
可以選擇需要的版本進行下載。


感謝網友 xiyuan1999 在csdn上提供的此下載地址。



zhyiwww 2014-10-17 09:04 發表評論
]]>
JAVA中的日期轉化和格式化http://www.tkk7.com/zhyiwww/archive/2014/02/19/410058.htmlzhyiwwwzhyiwwwWed, 19 Feb 2014 10:20:00 GMThttp://www.tkk7.com/zhyiwww/archive/2014/02/19/410058.htmlhttp://www.tkk7.com/zhyiwww/comments/410058.htmlhttp://www.tkk7.com/zhyiwww/archive/2014/02/19/410058.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/410058.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/410058.html 

轉換:

從Date到String

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

Date d = new Date();

String dstr = Df.format(d);

從String到日期

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

Date d = df.parse("2014-02-19");

 

從date到calendar

Calendar cd1 = Calendar.getInstance();

Date sd1 = df.parse(startDate);        

cd1.setTime(sd1);

如:

startDate="2014-02-19";

從calender到Date

Calendar cd1 = Calendar.getInstance();

Date d = cd1.getTime();

 

 

格式化:

格式化Date

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

String dstr = df.format(new Date());

格式化Calendar

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

Calendar cd1 = Calendar.getInstance();

String dstr = df.format(cd1.getTime());

格式化日期字符串

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

Date d = df.parse("2014-02-19");

DateFormat df1 = new SimpleDateFormat("MM-dd");

String dstr2 = df1.format(d);

 

 



zhyiwww 2014-02-19 18:20 發表評論
]]>
ant中depends調用任務和antcall調用任務的區別http://www.tkk7.com/zhyiwww/archive/2012/04/10/373674.htmlzhyiwwwzhyiwwwTue, 10 Apr 2012 01:27:00 GMThttp://www.tkk7.com/zhyiwww/archive/2012/04/10/373674.htmlhttp://www.tkk7.com/zhyiwww/comments/373674.htmlhttp://www.tkk7.com/zhyiwww/archive/2012/04/10/373674.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/373674.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/373674.html
  <target name="war.import" depends="svn.task,war.name">
    <echo>A: ${war.name}</echo>
  </target>

有時用
  <target name="war.import" depends="svn.task">
        <antcall target="war.name"/>
        <echo>B: ${war.name}</echo>
  </target>
兩種方法有什么不同呢?

通常來看,感覺沒什么不同,其實是有不同的。只不過差異在一些不太明顯的地方。

如果單純的是兩個過程調用,就是沒有區別的。區別在于,用depends的方式調用,那么war.name任務中的設置或者修改的屬性值可以在后面的任務中使用,而用antcall的調用就不可以。

如:如war.name任務如下:
        <target name="war.name">

                <echo>
                        task war.name need to pass 4 parameters:
                        project.name
                        release.version
                        deploy.type
                </echo>

                <property name="war.name" value="${project.name}-${release.version}_${deploy.type}-${today}-${build.number}.war"/>
                <property name="war.file" value="${bin.dir}/${war.name}"/>

                <property name="war.md5.name" value="${war.name}.MD5"/>
                <property name="war.md5.file" value="${bin.dir}/${war.md5.name}"/>

                <echo>
                |-------------------------------------------------------------------------------|
                war.name        : ${war.name}
                war.file        : ${war.file}
                war.md5.name    : ${war.md5.name}
                war.md5.file    : ${war.md5.file}
                |-------------------------------------------------------------------------------|
                </echo>

        </target>

那么第一種調用方法,就能正確取得war.name屬性的值,而第二種調用就不能。所以建議盡可能的使用depends進行任務調用。

區別在細微的地方,不過也值得注意。


zhyiwww 2012-04-10 09:27 發表評論
]]>
tomcat restart shell scriptshttp://www.tkk7.com/zhyiwww/archive/2012/03/16/372056.htmlzhyiwwwzhyiwwwFri, 16 Mar 2012 09:19:00 GMThttp://www.tkk7.com/zhyiwww/archive/2012/03/16/372056.htmlhttp://www.tkk7.com/zhyiwww/comments/372056.htmlhttp://www.tkk7.com/zhyiwww/archive/2012/03/16/372056.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/372056.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/372056.html
linux重啟tomcat腳本:


tomcat_home=/opt/apache-tomcat-6.0.32

ps -ef |grep tomcat  |awk {'print $2'} | sed -e "s/^/kill -9 /g" | sh -

rm  $tomcat_home/logs/* -rf
rm  $tomcat_home/work/* -rf


$tomcat_home/bin/startup.sh

tail -f $tomcat_home/logs/catalina.out

保存為restart.sh
執行就可以了。





zhyiwww 2012-03-16 17:19 發表評論
]]>
Ubuntu下ICE-3.4.2的安裝http://www.tkk7.com/zhyiwww/archive/2011/10/20/361661.htmlzhyiwwwzhyiwwwThu, 20 Oct 2011 08:47:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/10/20/361661.htmlhttp://www.tkk7.com/zhyiwww/comments/361661.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/10/20/361661.html#Feedback2http://www.tkk7.com/zhyiwww/comments/commentRss/361661.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/361661.html【1】先安裝QT-4.3.5
請參見
安裝到 /opt/qt-x11-4.3.5

【2】創建鏈接
ln -s /opt/qt-x11-4.3.5 /opt/qt

【3】安裝berkeley_db_5.2.36
安裝到/opt/berkeley_db_5.2.36

【4】創建鏈接
ln -s /opt/berkeley_db_5.2.36 /opt/db

【5】安裝其他依賴包
aptitude install build-dep build-depqt4-qmake bzip2 expat g++ libavahi-gobject-dev libbz2-dev libcurl4-openssl-dev libexpat-dev libfontconfig-dev libfreetype6-dev libjgoodies-animation-java libjgoodies-binding-java libjgoodies-uiflite-java libjgoodies-binding-java libjgoodies-forms-java libjgoodies-looks-java libmcpp-dev libsm-dev libssl-dev libx11-dev libxext-dev libxrender-dev libxtst-dev openssl qt4-qmake -y
我整理的。
從http://download.csdn.net/download/moliqin/3693452下載jgoodies-common包,解壓。
cp jgoodies-common-1.2.1.jar /usr/share/java/
ln -s /usr/share/java/jgoodies-common-1.2.1.jar  /usr/share/java/jgoogies-common.jar


【6】cpp編譯

修改ICE編譯配置
cd /tmp/ICE-3.4.2/cpp
vim config/Make.rules
修改如下配置項內容:
 40 LP64                    ?= yes
 76 DB_HOME                 ?= /opt/db
117 QT_HOME = /opt/qt

修改之后,保存。
執行編譯。
make
基本上就可以正常了。

【7】cpp安裝
(如果只用java可以不用編譯,只需要通過apt 安裝ice就可以了。)
make install

【8】 ICE java安裝
cd ICE-3.4.2/java

make
make install
就應該能順利安裝了。


其實。在Ubuntu下面直接用 aptitude install  zeroc-ice33  就可以安裝一個完整的ice環境。 上面的是用編譯安裝的方法。更麻煩。
安裝后,共享的類包在/usr/share/java下面。



   


zhyiwww 2011-10-20 16:47 發表評論
]]>
命令行和ant腳本的參數傳遞http://www.tkk7.com/zhyiwww/archive/2011/09/02/357823.htmlzhyiwwwzhyiwwwFri, 02 Sep 2011 06:44:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/09/02/357823.htmlhttp://www.tkk7.com/zhyiwww/comments/357823.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/09/02/357823.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/357823.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/357823.html可以通過以下的方式進行參數傳入:
ant -f ../../build.xml idc.$type.$ismenu.war -Dparent_version=$parent_version -Dson_version=$son_version

使用方法:   
    在build.xml文件定義如下屬性:
   <property name="parent.version" value="${parent_version}" />
   <property name="son.version" value="${son_version}" />

在任務中使用:

        <target name="war" depends="build.all">

                <property name="war.name" value="${product.bin.dir}/${project.context}-${parent.version}-${current.date}.war"/>

                <war destfile="${war.name}" webxml="${project.webroot}/WEB-INF/web.xml">
                        <fileset dir="${project.webroot}">
                                <include name="**/*"/>
                        </fileset>
                </war>
        </target>

紅色字體部分,就可以實現從此參數取得值。

通過以上方法,就可以從命令行中把參數傳遞入ant腳本。
這樣,就可以靈活的使用shell腳本和ant腳本的整合。實現更方便和靈活的功能。



zhyiwww 2011-09-02 14:44 發表評論
]]>
ant任務調用和參數傳遞http://www.tkk7.com/zhyiwww/archive/2011/08/25/357255.htmlzhyiwwwzhyiwwwThu, 25 Aug 2011 05:54:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/08/25/357255.htmlhttp://www.tkk7.com/zhyiwww/comments/357255.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/08/25/357255.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/357255.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/357255.html
 <target name="war" depends="build.all">

                <property name="war.name" value="${product.bin.dir}/${project.context}-${current.date}.war"/>

                <war destfile="${war.name}" webxml="${project.webroot}/WEB-INF/web.xml">
                        <fileset dir="${project.webroot}">
                                <include name="**/*"/>
                        </fileset>
                </war>
        </target>

紅色的字體部分就是在調用的時候需要提供的參數。默認的值為
${product.bin.dir}/${project.context}-${current.date}.war

任務調用:
        <target name="tt">
                <antcall target="war">
                        <param name="war.name" value="${product.bin.dir}/tt.war"/>
                </antcall>
        </target>
調用時用antcall任務來實現。用綠色字體部分進行構造參數的值,并傳遞給被調任務。

通過這種方式使用起來會更靈活。



zhyiwww 2011-08-25 13:54 發表評論
]]>
代碼資源釋放問題http://www.tkk7.com/zhyiwww/archive/2011/08/11/356295.htmlzhyiwwwzhyiwwwThu, 11 Aug 2011 03:25:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/08/11/356295.htmlhttp://www.tkk7.com/zhyiwww/comments/356295.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/08/11/356295.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/356295.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/356295.html

看如下代碼:

    public void destroy() {
        super.destroy();
        if (runner != null) {
            runner.stop();
            runner = null;
        }
        if (thread != null) {
            thread.interrupt();
            thread = null;
        }
    }

這是摘錄的一段代碼。應該說對資源釋放時的問題做的比較到位。

  if (runner != null)語句可以有效的避免NullPointException異常的拋出

     runner.stop();可以釋放運行階段的資源。

          runner = null; 把runner對象置空,有利于資源的快速回收。


綜上,此段代碼既有穩健性考慮,又有適當性能提升考慮,在我們寫代碼時值得借鑒。







zhyiwww 2011-08-11 11:25 發表評論
]]>
build.xml引用其它文件的任務http://www.tkk7.com/zhyiwww/archive/2011/08/03/355640.htmlzhyiwwwzhyiwwwWed, 03 Aug 2011 01:54:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/08/03/355640.htmlhttp://www.tkk7.com/zhyiwww/comments/355640.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/08/03/355640.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/355640.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/355640.html
        <target name="product.deploy">
                <echo>
                        ${proj.dir}/tomcat.xml
                </echo>
                <sequential>
                        <exec executable="ant">
                                <arg value="-f" />
                                <arg value="${proj.dir}/tomcat.xml" />
                                <arg value="tomcat.stop.linux" />
                        </exec>


                        <!-- deploy  -->
                        <echo>
                                copy ${bin.dir}/${web.context}.war file to ${container.webapps.dir}
                        </echo>
                        <copy todir="${container.webapps.dir}" file="${bin.dir}/${web.context}.war" />

                        <exec executable="ant">
                                <arg value="-f" />
                                <arg value="${proj.dir}/tomcat.xml" />
                                <arg value="tomcat.start.linux" />
                        </exec>

                </sequential>

        </target>

紅色字體的部分是調用了另外一個build文件中的任務。用的是ant call的方式調用的。
綠色字體部分引入的是另外一個build文件的路徑。

通過這種方式,可以把不同類型功能的任務放在單一的文件中。


zhyiwww 2011-08-03 09:54 發表評論
]]>
Ant任務依賴圖形化工具(轉載)http://www.tkk7.com/zhyiwww/archive/2011/07/21/354769.htmlzhyiwwwzhyiwwwThu, 21 Jul 2011 03:57:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/07/21/354769.htmlhttp://www.tkk7.com/zhyiwww/comments/354769.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/07/21/354769.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/354769.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/354769.html


Ant Task Dependency Graphs

by Jeanne Boyarsky

When inheriting an Ant build file to maintain, it is useful to get a feel for the flow and structure. Sketching the dependencies between targets is a useful way to do this. While it is time consuming to do so by hand, there are a number of tools to help.

I tried three different tools to generate the output. All of them generate a .dot file which needs to be run through the Graphviz tool to be converted to a useful format. Graphviz can covert to all image formats among many others. Each tool is described below with an example of how to call it. I've also included two sample images: from our build script to Pick Winners in the weekly book/software promotion and a contrived example designed to show how antCall and forEach work.

  1. Ant2Dot - Ant2Dot is an XSLT file that converts your Ant build file into a .dot file. Each target becomes a rectangle and dependencies between targets are shown. The instructions for using it are a bit old and only apply to Java 1.3 and 1.4. They don't work on Java 5/6 without modification. The website lists a "to do" for adding support for Ant 1.6's import and subant features. Similarly, 1.7 features aren't supported yet. Ant2Dot is good for simple build files, but doesn't scale up to handle use advanced features. Running was as simple as downloading a stylesheet and running the command:
    C:\j2re1.4.2_03\bin\java org.apache.xalan.xslt.Process
    -IN build.xml -XSL ant2dot.xsl -OUT build.dot
    Output of JavaRanch's book promotion pick a winner dependency structure and a contrived sample:
  2. Vizant - Vizant is a Java library that creates a .dot file by using a SAX parser on your Ant build file. Each target becomes an oval and dependencies between targets are shown. Vizant supports antcalls and allows you to drill down to generate only part of the build tree. You can also drill down to show part of your build tree. Vizant was easy to use. I wanted the dependency ordering so continued looking for a library to meet my needs. In order to run Vizant, you need to download a jar containing the source and build it using Ant. They provide the build.xml to do so. Since this is a library for Ant documentation, it is reasonable to assume people know how to run Ant. You also call it through a simple Ant build file:
    <?xml version="1.0"?>
    <project name="Vizant" basedir="." default="vizant">
    <taskdef name="vizant"
    classname="net.sourceforge.vizant.Vizant"
    classpath="build/vizant.jar" />

    <target name="vizant">
    <vizant antfile="build.xml" outfile="build.dot" uniqueref="true" />
    </target>

    </project>
    Output of JavaRanch's book promotion pick a winner dependency structure and a contrived sample:
  3. Grand - Grand is also a Java library that creates a .dot file. It takes a different approach and actually creates the Ant directory structure using Ant's Java libraries. It can support anything in your classpath including ant-contrib and Ant 1.6's import feature. The logic doesn't capture the subtleties of Ant-Contrib like the forEach loop though. The graph is a bit more detailed. The default target is a yellow hexagon. Targets with a description are marked in blue so you can show entry points. The remaining targets are shown as ovals. You can also drill down to show part of your build tree. You can use a Grand UI tool instead of the dot file, but I wasn't able to get the UI. Like Ant2Dot, dependencies are numbered. Grand was as easy to use as Vizant. They provide you with a jar for download. You call it through a simple Ant build file adding any other jars used to the classpath:
    <?xml version="1.0"?>
    <project name="Grand" basedir="." default="grand">

    <typedef resource="net/ggtools/grand/antlib.xml" classpath="grand.jar" />

    <target name="grand">
    <grand output="grand-build.dot" buildfile="build.xml" />
    </target>

    </project>
    Output of JavaRanch's book promotion pick a winner dependency structure and a contrived sample:
Comparison of visualization tools
ToolShows dependency orderingFlags default targetFlags main targets
Ant2DotYesYesNo
VizantNoNoNo
GrandYesYesYes


zhyiwww 2011-07-21 11:57 發表評論
]]>
通過sed刪除java文件中的所有注釋http://www.tkk7.com/zhyiwww/archive/2011/01/31/343806.htmlzhyiwwwzhyiwwwMon, 31 Jan 2011 05:56:00 GMThttp://www.tkk7.com/zhyiwww/archive/2011/01/31/343806.htmlhttp://www.tkk7.com/zhyiwww/comments/343806.htmlhttp://www.tkk7.com/zhyiwww/archive/2011/01/31/343806.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/343806.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/343806.htmljava文件中的注釋通常是如下格式:
/*
*
*
*/
或者是如下格式
//
//
//
那么如何一次刪除所有java文件中的所有注釋呢?
find . -name *.java -exec sed  -e '/\*/d' -e '/\/\//d' -e '/^\s*$/d' {} \;
通過sed的三次匹配操作,進行刪除操作。最后一個操作刪除所有的空行。
以上操作,只做刪除操作,并不修改文件。如果想直接對文件內容操作,可以用:
find . -name *.java -exec sed -i  -e '/\*/d' -e '/\/\//d' -e '/^\s*$/d' {} \; 
-i參數可以直接把改變寫入到文件中去。



zhyiwww 2011-01-31 13:56 發表評論
]]>
SVN的分支創建和合并http://www.tkk7.com/zhyiwww/archive/2010/12/30/342018.htmlzhyiwwwzhyiwwwThu, 30 Dec 2010 11:20:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/12/30/342018.htmlhttp://www.tkk7.com/zhyiwww/comments/342018.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/12/30/342018.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/342018.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/342018.html
SVN項目結構通常如下:


【1】創建分支比較簡單
不做詳細說明
假如創建后的分支如下圖所示:



注意點:
(1)可以在trunk上創建分支
(2)可以在分支上創建分支

【2】合并分支
合并分支相對來說麻煩一些,一些關鍵的問題要搞清楚。
注意點:
(1)當前的working copy 一定是合并目標(務必切記)
        否則,不能合并成功
        比如:你想從分支V0.0.1合并到trunk 4207上,那么,你的當前工作目錄一定要是trunk
(2)當前工作目錄的提交只能提交到對應的分支
(3)分支下的分支不能合并到trunk上
(4)分支合并后,需要提交一次才能使合并有效完成



zhyiwww 2010-12-30 19:20 發表評論
]]>
ant+Clover異常的解決方法http://www.tkk7.com/zhyiwww/archive/2010/12/01/339466.htmlzhyiwwwzhyiwwwWed, 01 Dec 2010 00:55:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/12/01/339466.htmlhttp://www.tkk7.com/zhyiwww/comments/339466.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/12/01/339466.html#Feedback1http://www.tkk7.com/zhyiwww/comments/commentRss/339466.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/339466.html BUILD FAILED
com.atlassian.clover.registry.NoSuchRegistryException: Clover registry file "/tmp/clover-db/ant-coverage.db" does not exist, cannot be read or is a directory.
Please ensure Clover has instrumented your source files.
You may need to remove existing .class files for this to occur.
    at com.cenqua.clover.CloverDatabase.<init>(CloverDatabase.java:82)
    at com.cenqua.clover.CloverDatabase.<init>(CloverDatabase.java:60)
    at com.cenqua.clover.reporters.CloverReportConfig.getCoverageDatabase(CloverReportConfig.java:329)
    at com.cenqua.clover.reporters.Current.getCoverageDatabase(Current.java:126)
    at com.cenqua.clover.reporters.xml.XMLReporter.<init>(XMLReporter.java:52)
    at com.cenqua.clover.reporters.CloverReporter.buildReporter(CloverReporter.java:70)
    at com.cenqua.clover.tasks.CloverReportTask.generateReports(CloverReportTask.java:428)
    at com.cenqua.clover.tasks.CloverReportTask.cloverExecute(CloverReportTask.java:385)
    at com.cenqua.clover.tasks.CloverHtmlReportTask.cloverExecute(CloverHtmlReportTask.java:108)
    at com.cenqua.clover.tasks.AbstractCloverTask.execute(AbstractCloverTask.java:55)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:357)
    at org.apache.tools.ant.Target.performTasks(Target.java:385)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    at org.apache.tools.ant.Main.runBuild(Main.java:758)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

Total time: 56 seconds

原因是沒有生成clover的庫文件。
解決的方法是:
ant with.clover  build.clean build.compile junit.test cactus.test
需要重新編譯生成clover庫文件。
這樣就生成庫文件了。
ant clover.html
就可以生成報告了。

clover的使用,有一個非常重要的注意點:
The <clover-setup> task, must be called before compiling the sources. If the "with.clover" target is not called before "code" (compile) in the same invocation of Ant, the effect of clover-setup will lost. i.e. javac does not know to use the Clover compiler to instrument your source files before compiling them. It will not create the database and generate class file for clover use, hence clover will not take effect.





zhyiwww 2010-12-01 08:55 發表評論
]]>
java中什么時候使用finalize()方法http://www.tkk7.com/zhyiwww/archive/2010/11/26/339105.htmlzhyiwwwzhyiwwwFri, 26 Nov 2010 02:12:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/11/26/339105.htmlhttp://www.tkk7.com/zhyiwww/comments/339105.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/11/26/339105.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/339105.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/339105.html 這一點給了我們發開發人員省了不少心,但是finalize()方法一直是個困惑。
虛擬機在執行垃圾回收之前都會執行對象的finalize(),那么finalize()到底有什么用呢?
其實finalize()主要是給其他調用而創建的空間在對象回收時頁同步回收而設置的。
比如,你調用了C語言,使用了mallow()開辟了一段內存空間。在你釋放java對象的時候,虛擬機只能釋放java對象占用的空間,而不能釋放C開辟的內存空間,所你你在釋放此對象之前要先回收你在C語言中開辟的空間。
這各時候才用到finalize()方法。
平時的時候不要隨便使用finalize()方法。

以上理解是《java編程思想中的理論》,詳細深入的理解請參考此書 。




zhyiwww 2010-11-26 10:12 發表評論
]]>
ubuntu環境下ant的內存配置http://www.tkk7.com/zhyiwww/archive/2010/11/19/338472.htmlzhyiwwwzhyiwwwFri, 19 Nov 2010 04:54:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/11/19/338472.htmlhttp://www.tkk7.com/zhyiwww/comments/338472.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/11/19/338472.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/338472.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/338472.html 在使用ant編譯系統時由于消耗內存較大,出現內存溢出異常。

在ubuntu下配置方法:
【1】創建ant.conf
#touch /etc/ant.conf

【2】添加內存配置
#vim /etc/ant.conf
添加如下內容:

ANT_OPTS="-Xms256m -Xmx512m"
 




zhyiwww 2010-11-19 12:54 發表評論
]]>
tomcat下basic授權的訪問配置http://www.tkk7.com/zhyiwww/archive/2010/09/17/332262.htmlzhyiwwwzhyiwwwFri, 17 Sep 2010 01:55:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/09/17/332262.htmlhttp://www.tkk7.com/zhyiwww/comments/332262.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/09/17/332262.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/332262.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/332262.html tomcat下basic授權的訪問配置
【1】把下面的代碼放到你在自己項目的<web-app>下面

<security-constraint>
        <web-resource-collection>
            <web-resource-name>Entire Application</web-resource-name>
            <url-pattern>/*</url-pattern>
         </web-resource-collection>
        <!-- NOTE: This role is not present in the default users file -->
        <auth-constraint>
            <role-name>user</role-name>
        </auth-constraint>

    </security-constraint>

    <!-- Define the Login Configuration for this Application -->
    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>TEST ACCESS CONTROL</realm-name>
    </login-config>

【2】在tomcat-user.xml里面,添加如下代碼
<tomcat-users>
  <role rolename="user"/>
  <user username="xyz" password="xyz" roles="user"/>
</tomcat-users>
【3】重啟tomcat就可以了





zhyiwww 2010-09-17 09:55 發表評論
]]>
ubuntu+svn+apache+trac配置http://www.tkk7.com/zhyiwww/archive/2010/07/26/327137.htmlzhyiwwwzhyiwwwMon, 26 Jul 2010 06:05:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/07/26/327137.htmlhttp://www.tkk7.com/zhyiwww/comments/327137.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/07/26/327137.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/327137.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/327137.html [1]安裝apache
[2]安裝svn
[3]配置apache+svn
保證svn能通過http正常訪問。
Ubuntu下SVN+apache的配置請參閱http://www.tkk7.com/zhyiwww/archive/2009/07/23/288034.html

配置trac
[4]安裝trac
aptitude install trac

[5]創建trac目錄,并初始化trac項目
#cd /var/www
#mkdir trac
#trac-admin trac initenv
>
.....
>[svn]
....
>SVN reposititory
> 輸入你的SVN reposititory目錄
......

[6]配置trac+apache
此處用虛擬主機來實現
配置如下
# vim /etc/apache2/posts.conf
添加
## trac
NameVirtualHost *:8001
Listen 8001

#touch /etc/apache2/sites-available/trac
#vim /etc/apache2/sites-available/trac
添加如下內容:
<VirtualHost *:8001>

DocumentRoot /var/www
  <Location />
    SetHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv /var/www/trac
    PythonOption TracUriRoot /
  </Location>

</VirtualHost>


[7]修改訪問權限
#chown root:www-data /var/www/trac
#chmod -R g+w /var/www/trac/db/

[8]重啟apache
# /etc/init.d/apache2 resatart

[9]訪問驗證
訪問http://localhost:8001/,如果能看到trac的頁面,就說明配置成功。








zhyiwww 2010-07-26 14:05 發表評論
]]>
linux環境apache多端口配置虛擬主機的方法http://www.tkk7.com/zhyiwww/archive/2010/05/24/321742.htmlzhyiwwwzhyiwwwMon, 24 May 2010 08:50:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/05/24/321742.htmlhttp://www.tkk7.com/zhyiwww/comments/321742.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/05/24/321742.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/321742.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/321742.html 默認情況下,linux上apache使用的
默認文檔目錄是:/var/www
默認端口是:80

如果想發布自己的一個系統資源目錄,可以使用下面的方法,執行如下命令:

(1)添加監聽端口
#cd /etc/apache2
#vim ports.conf
文件添加:
NameVirtualHost *:8000
Listen 8000

(2)配置虛擬目錄
#cd /etc/apache2/sites-available
#cp default default-me
#vim default-me
文件內容如下:

<VirtualHost *:8000>
    ServerAdmin webmaster@localhost

    DocumentRoot /wwwroot
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /wwwroot/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>


    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined

</VirtualHost>
粗體部分是關鍵點。

(3)發布站點

# ln -s /etc/apache2/sites-available/default-me /etc/apache2/sites-enabled/001-default

(4)重啟服務

#/etc/init.d/apache2 restart

(5)測試
http://localhost:8000/
如果能夠正常訪問就說明配置正確了。






zhyiwww 2010-05-24 16:50 發表評論
]]>
Myeclipse 8/8.5 subclipse插件的安裝和配置http://www.tkk7.com/zhyiwww/archive/2010/05/21/321522.htmlzhyiwwwzhyiwwwFri, 21 May 2010 02:50:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/05/21/321522.htmlhttp://www.tkk7.com/zhyiwww/comments/321522.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/05/21/321522.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/321522.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/321522.html

通常,我們可以用update來直接安裝。但是myeclipse限制了中國區的下載和更新。所以我們只能用插件配置的方法來實現。

方法參考自http://blog.csdn.net/jackpk/archive/2010/05/13/5587633.aspx

具體配置方法如下:

安裝subclipse, SVN 插件
1
、從官網下載site-1.6.9.zip文件,網址 是:subclipse.tigris.org,

2
、從中解壓出featuresplugins文件夾,復制到 /opt/MyEclipse/myPlugin/svn里面,其它的*.xml文件不要。

3
/opt/MyEclipse/MyEclipse8.5/dropins下新建文件svn.link,內容是:path=/opt/MyEclipse/myPlugin/svn 保存

4
、 刪除/opt/MyEclipse/MyEclipse8.5/configuration/org.eclipse.update文件夾

5
、 重啟myeclipse就一切正常了。



zhyiwww 2010-05-21 10:50 發表評論
]]>
Ubuntu下Jfreechart輸出圖片中文亂碼問題的解決方法http://www.tkk7.com/zhyiwww/archive/2010/05/18/321273.htmlzhyiwwwzhyiwwwTue, 18 May 2010 06:29:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/05/18/321273.htmlhttp://www.tkk7.com/zhyiwww/comments/321273.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/05/18/321273.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/321273.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/321273.html閱讀全文

zhyiwww 2010-05-18 14:29 發表評論
]]>
Oracle Blob字段的亂碼問題http://www.tkk7.com/zhyiwww/archive/2010/04/21/318943.htmlzhyiwwwzhyiwwwWed, 21 Apr 2010 03:10:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/04/21/318943.htmlhttp://www.tkk7.com/zhyiwww/comments/318943.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/04/21/318943.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/318943.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/318943.html 在使用oracle Blob字段存儲大字符串時,讀取初來的字符串經常出現亂碼問題。

背景:
1.oracle數據庫服務器系統使用的是UTF-8編碼或者是AL32UTF8編碼
2.在Web應用中已經將請求編碼設置為UTF-8編碼
3二進制數據的取得
                    Blob blogObj = rst.getBlob("CONTENT");
                    if(blogObj!=null){
                        byte[] content = blogObj.getBytes(1, (int) blogObj.length());
                            try {
                                news.setContent(new String(content));
                            } catch (UnsupportedEncodingException e) {
                               
                                e.printStackTrace();
                            }
                           
                    }

亂碼問題的解決方法:
                                news.setContent(new String(content,“UTF-8”));

之后就不會出現亂碼問題。




zhyiwww 2010-04-21 11:10 發表評論
]]>
多線程頻繁操作MSSQL導致java.net.BindException異常的解決方法http://www.tkk7.com/zhyiwww/archive/2010/04/14/318245.htmlzhyiwwwzhyiwwwWed, 14 Apr 2010 03:46:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/04/14/318245.htmlhttp://www.tkk7.com/zhyiwww/comments/318245.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/04/14/318245.html#Feedback6http://www.tkk7.com/zhyiwww/comments/commentRss/318245.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/318245.html [1]多線程啟動頻繁操作MSSQL,拋出

到主機  的 TCP/IP 連接失敗。 java.net.BindException: Address already in use: connect

[2]在服務器上,執行netstat -a,可以看到很多TCP  TIME_WAIT
很多端口被占用
類似下面的:
TCP    127.0.0.1:1025         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:1026         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:1027         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:1028         127.0.0.1:1433         TIME_WAIT
......
TCP    127.0.0.1:4998         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:4999         127.0.0.1:1433         TIME_WAIT
TCP    127.0.0.1:5000         127.0.0.1:1433         TIME_WAIT

開始,我跑2個線程都有問題,過一會程序就拋上面的異常。

我現在用了一個可行的方案,不是最好的方案。
兩步操作:
[1]通過修改注冊表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:
添加或者修改下面兩項
MaxUserPort       = dword:00004e20 (20,000 decimal)
TcpTimedWaitDelay = dword:0000001e (30 decimal)

我的值設置
MaxUserPort值修改為十進制60000
TcpTimedWaitDelay值修改為十進制10

MaxUserPort是最大的可用端口,最大值也就是65535了
TcpTimedWaitDelay就是默認的TimeWait時間,默認是30,改小了,可以提高響應速度。

經過實踐,修改此兩項參數是很有效的方法。

[2]修改程序
在對線程控制上,需要頻繁對數據庫操作的地方,實現讓線程休眠一段時間


for(int i = 0;i<100000;i++){

           TestThread t = new TestTread();//頻繁對數據庫操作
           t.start();   

            try {
                this.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
}


原因分析:
JDBC Connection 關閉后,釋放了對數據庫連接的資源,但是對與服務器的Socket連接并沒有完全釋放。TCP在處理一個新的請求的時候,會創建新的連接,TIME_WAIT狀態的連接在4分鐘后釋放。所以,如果在4分鐘內就把連接端口資源用完的話,就會出現上面的異常。如果4分鐘后,前面用去的端口得到釋放,取得和釋放達到一個平衡,就不會再出現此異常了。

默認的MaxUserPort是5000,這個值對于多線程來說,很容易就達到了。所以,如果線程跑的多,很容易就跑死了。

根本解決:
還是要從程序上下功夫。
[1]避免頻繁操作問題
如果是檢索,不要一個一個檢索,一次檢索到列表里面再進行處理。
如果數據量很大,那就用分頁操作進行處理。

如果是其他的操作,添加,刪除,修改的話,就可以使用批量操作來進行。這樣,可以少去頻繁取連接。就可以避免上面的問題。

[2]資源釋放要快
數據庫資源要及時釋放。

包括Resulset,Statement,Connection
要及時關閉

如果數據庫操作特別頻繁,可以考慮使用連接共用。
這樣,雖然連接占用的時間長點,但是,不會出現上面的問題。
在數據導入的程序里面還是很有用的。

[3]可以考慮使用連接池來提升系統共享上的性能。



















zhyiwww 2010-04-14 11:46 發表評論
]]>
JSP+Servlet+Oracle系統亂碼問題解決方法http://www.tkk7.com/zhyiwww/archive/2010/03/29/316820.htmlzhyiwwwzhyiwwwMon, 29 Mar 2010 05:58:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/03/29/316820.htmlhttp://www.tkk7.com/zhyiwww/comments/316820.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/03/29/316820.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/316820.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/316820.html 統一使用UTF-8編碼
[1]Oracle字符編碼集
oracle服務器端的編碼選擇AL32UTF8,如果安裝的時候沒有選擇或者不是使用的AL32UTF8,那么就需要手動修改oracle系統的編碼為
UTF-8.


[2]在web應用程序中添加EncodingFilter
設置
request.setCharacterEncoding("UTF-8");

[3]設置tomcat編碼
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

[4]程序
通過以上的設置,在程序中,就不需要進行編碼的轉換,直接取得的就是UTF-8的編碼,可以直接存入數據庫。
從數據庫中取出也不會出現亂碼問題了。





zhyiwww 2010-03-29 13:58 發表評論
]]>
Web開發多資源配置文件的讀取實現http://www.tkk7.com/zhyiwww/archive/2010/03/20/316031.htmlzhyiwwwzhyiwwwSat, 20 Mar 2010 10:20:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/03/20/316031.htmlhttp://www.tkk7.com/zhyiwww/comments/316031.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/03/20/316031.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/316031.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/316031.html 解決開發中多用戶修改消息,或者多用戶修改配置文件的沖突問題。
注意在粗體部分實現一次將所有的配置資源文件都讀取到內存中去。任何一個用戶只需要自己舔加自己的配置文件就可以了。
最后統一在實現配置文件的整合。


寫一個BaseHttpServlet:

package base.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.List;
import java.util.Properties;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

/**
 * Servlet implementation class CcxHttpServlet
 */
public class BaseHttpServlet extends HttpServlet {

    /**
     *
     */
    private static final long serialVersionUID = -5793303331880998441L;

    protected Logger log = Logger.getLogger(this.getClass());

    private final String MESSAGE_RESOURCE_FILE = "/com/xxx/project/i18/message.properties";
   
    protected final static Properties messages = new Properties();
   
   
    static{
            // TODO you need change according to different project
            String messageDir = "/com/ccx/information/i18";
           
            URL url = BaseHttpServlet.class.getResource(messageDir);
           
            File mf = new File(url.getFile());
           
            if(mf.isDirectory()){
                File[] l = mf.listFiles(new FilenameFilter(){
                    public boolean accept(File dir, String name) {
                        return name.endsWith(".properties");
                    }   
                });
               
               
                for(int i=0;i<l.length;i++){
                    File f = l[i];
                    try {
                        messages.load(new FileInputStream(f));
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
               
            }
    }

   
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BaseHttpServlet() {
        super();
    }

    /**
     * forword to page
     *
     * @param request
     * @param response
     * @param uri
     *            ,the target page
     * @throws ServletException
     * @throws IOException
     */
    protected void farward(HttpServletRequest request,
            HttpServletResponse response, String uri) throws ServletException,
            IOException {
        RequestDispatcher dis = request.getRequestDispatcher(uri);
        if (dis == null) {
            // to error page
            output(response, "error : no page found");
        } else {
            dis.forward(request, response);
        }
    }

    /**
     * print information to client
     *
     * @param response
     * @param notice
     * @throws IOException
     */
    protected void output(HttpServletResponse response, String notice)
            throws IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("UTF-8");
       
        PrintWriter out = response.getWriter();
        out.print("<span style=\"color:red\">");
        out.println(notice);
        out.print("</span>");
        out.flush();
        out.close();
    }

    /**
     * send redirect to target page
     *
     * @param response
     * @param uri
     * @throws ServletException
     * @throws IOException
     */
    protected void redirect(HttpServletResponse response, String uri)
            throws ServletException, IOException {
        response.sendRedirect(uri);
    }

    public void init() throws ServletException {
        super.init();
       

       
    }

   
   
   
}






zhyiwww 2010-03-20 18:20 發表評論
]]>
web中屬性文件初始化http://www.tkk7.com/zhyiwww/archive/2010/03/20/316022.htmlzhyiwwwzhyiwwwSat, 20 Mar 2010 09:22:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/03/20/316022.htmlhttp://www.tkk7.com/zhyiwww/comments/316022.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/03/20/316022.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/316022.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/316022.html PropertiesUtil.java
內容入如下:

package org.aa.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesUtil {
   
   
    public static Properties loadProperties(String propertiesFilePath) {
        Properties p = new Properties();
        InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream(propertiesFilePath);
        if(in==null){
            return p ;
        }
        try {
            p.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
       
        return p;
    }
   
}


調用:


    private static final String DATABASE_CONFIG_FILE = "/com/company/db.properties";
   
    private static Properties dbProp= PropertiesUtil.loadProperties(DATABASE_CONFIG_FILE);

    private static final String driverStr = "oracle.jdbc.driver.OracleDriver";
   
    private static final String defaultIp = dbProp.getProperty("database.server.ip");
    private static final String defaultId = dbProp.getProperty("database.server.id");
    private static final String defaultPort = dbProp.getProperty("database.server.port");

    //    private static final String conStr = "jdbc:oracle:thin:@192.168.1.10:1521:orcl";

    private static final StringBuffer buf = new StringBuffer(200);
   
    static{
        buf.append("jdbc:oracle:thin:@");
        buf.append(defaultIp);
        buf.append(":");
        buf.append(defaultPort);
        buf.append(":");
        buf.append(defaultId);
    }
   
    private static final String conStr = buf.toString();


注意黑體部分的路徑,這個是出問題的關鍵,路徑不對就不能取到值。

這個也可以用在國際化中的屬性文件的初始化。






zhyiwww 2010-03-20 17:22 發表評論
]]>
Subversion目錄訪問權限控制http://www.tkk7.com/zhyiwww/archive/2010/03/18/315746.htmlzhyiwwwzhyiwwwThu, 18 Mar 2010 01:32:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/03/18/315746.htmlhttp://www.tkk7.com/zhyiwww/comments/315746.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/03/18/315746.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/315746.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/315746.html 那么在配置的時候,需要加上

    AuthType Basic
    AuthName "reposity access username and password"
    AuthUserFile /etc/subversion/passwd


[1]添加用戶
 # htpasswd /etc/subversion/passwd test
[2]修改用戶密碼
 # htpasswd /etc/subversion/passwd test

有的時候我們需要對用戶的訪問權限進行細化,不同的用戶或者不同組的用戶有不同的訪問權限。

 AuthzSVNAccessFile /etc/apache2/dav_svn.authz
這個授權文件是用來控制subversion的目錄訪問權限的。目錄的路徑可以自己指定。

具體的方法與你的配置有關,
[3]單Repository的話
上面的配置是
  SVNPath /svn/SVN_REPOS/myrepos

你的權限配置文件如下:
[groups]

[/]

* = rw

[/wp]
* =
zz = rw


關于組配置,省略。
上面的配置的權限如下:

 目錄  所有用戶  zz
 /  rw  rw
/wp
 無權限  rw

這里面的權限有繼承關系。所以,對于子目錄的權限,可以通過上面的方法來進行重新定義。

[4]多Repositiory

配置為
  
  SVNParentPath /svn/SVN_REPOS


[groups]
@dev = tt,yy

[myproject:/]

* = rw

[myproject:/wp]
* =
zz = rw


[team:/]
* = rw

[team:/ims]
*=
zz = r
@dev = rw

對應權限如下:
 Repository  項目目錄  用戶 權限
myproject
*
*
rw
myproject
/wp
*
無權限

 myproject /wp
 zz rw

 team  *  * rw

 team  /ims  * 無權限

team
/ims
zz
r

team
/ims
@dev(表示組)
rw


SubVersion的權限控制大致可以通過上面的方法來實現。




zhyiwww 2010-03-18 09:32 發表評論
]]>
linux下SqlDeveloper查詢表中文亂碼問題的解決方法http://www.tkk7.com/zhyiwww/archive/2010/03/05/314575.htmlzhyiwwwzhyiwwwFri, 05 Mar 2010 03:21:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/03/05/314575.htmlhttp://www.tkk7.com/zhyiwww/comments/314575.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/03/05/314575.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/314575.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/314575.html
以上問題的解決方案如下:

laptop:/tmp# cd /usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/

laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/# mkdir fallback

laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/# cd fallback

laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/fallback# ln -s `/usr/share/fonts/fonts/truetype/` .

laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/fallback# mkfontdir

laptop:/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/fonts/fallback# mkfontscale





zhyiwww 2010-03-05 11:21 發表評論
]]>
Tomcat6多虛擬主機和默認項目的配置http://www.tkk7.com/zhyiwww/archive/2010/02/20/313472.htmlzhyiwwwzhyiwwwSat, 20 Feb 2010 09:06:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/02/20/313472.htmlhttp://www.tkk7.com/zhyiwww/comments/313472.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/02/20/313472.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/313472.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/313472.html
編輯$TOMCAT_HOME/conf/server.xml文件
默認HOST配置如下:
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->

      </Host>

上面的部分是tomcat的原裝配置。

然后,在下面添加你自己的配置:

      <Host name="www.xyz.com"  appBase="webapps-xyz"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

            <Context path="/" reloadable="true" docBase="demo"/>

      </Host>

Context的配置,指定了一個默認的啟動項目。
在tomcat默認的配置下是ROOT項目,此配置生效,需要刪除webapps/ROOT目錄或者改為其他的目錄名字

此時 你用 http://www.xyz.com:8080/就可以訪問到demo項目了。

如果需要配置多個虛擬主機,按照上面的配置就可以了。










zhyiwww 2010-02-20 17:06 發表評論
]]>
事務管理與ThreadLocalhttp://www.tkk7.com/zhyiwww/archive/2010/02/11/312583.htmlzhyiwwwzhyiwwwThu, 11 Feb 2010 07:34:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/02/11/312583.htmlhttp://www.tkk7.com/zhyiwww/comments/312583.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/02/11/312583.html#Feedback2http://www.tkk7.com/zhyiwww/comments/commentRss/312583.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/312583.html
[1]引子

比如:
業務邏輯方法

public A bussinessMethod(){

   DaoA   a = new DaoA();
   a.udpate();

   DaoB  b = new DaoB();
   b.update;

}

假設,上面的事務是自動提交的。
那么,我們就可以什么不考慮。但是有一個問題,創建DAO對象的時候兩個對象用的是不同的Connection對象。

再假定我們的取得連接的代碼是

    public Connection getConnection(String username, String password)
            throws SQLException {
        Connection con = DriverManager
                .getConnection(conStr, username, password);
        return con;
    }

這個方法的一個調用。

那么如果,我們需要自己控制事務的開始和結束。
如何控制呢。
也許又有了新的方法


public A bussinessMethod(){

   DaoA   a = new DaoA();
   a.beginTx();
   a.udpate();
   a.endTx();
   a.close();

   DaoB  b = new DaoB();
   b.beginTx();
   b.update;
   b.endTx();
   b.close();
}

這樣我們就控制了事務,并且我們也只有這樣才能實現,因為,不同的DAO取得的是不同的Connection對象。

[2]問題
那么怎么才能實現兩個或多個DAO用同一個事務來控制呢?

首先就要解決一個根本問題,我們在一個事務中,不同的DAO取得的是同一個Connection,這個要怎么實現呢。我們想到了TheadLocal.

[3]方案
因為當一個業務邏輯要對多個DAO進行處理的時候,此操作屬于同一個線程內。所以,我們希望能把此Connection放在線程內,或者和線程有關聯。
第一個方案,可以用Map來使現。
就是Map<Thread,Connection>
但是這個map維護起來比較麻煩,如果一直put的話,那么這個map隨著系統的運行就會越來越大。

第二個方案,就是用ThreadLocal
在任何一個線程內都可以用ThreadLocal來保存一個變量的copy,這樣,如果此對象存在,就可以直接取用。
如果把Connection存在ThreadLocal也一樣。

所以,在同一個線程內,就可以保證取得到的是同一個Connection.


[4]實現
代碼

    private static ThreadLocal<Connection> localCon = new ThreadLocal<Connection>();

    public final static Connection getConnection() throws SQLException {

       
        Connection con = localCon.get();
       
        if(con==null||con.isClosed()){

            con = new OracleJdbcDatasource().getConnection();
           
            localCon.set(con);
        }
       
        return con;
    }


這樣就實現了上面的問題。


[5]新的事務管理

public A bussinessMethod(){

   DaoA   a = new DaoA();
   DaoB  b = new DaoB();

   a.beginTx();
   a.udpate();

   b.beginTx();
   b.update;

   a.endTx();
   a.close();

//   b.endTx();
//   b.close();

能實現一樣的效果
  
}


上面的黑體部分,就可以實現對事務的統一管理。

[6]改進

上面的方法給人的感覺有點別扭,但是卻能實現事務的統一管理。

我還要繼續改進。








zhyiwww 2010-02-11 15:34 發表評論
]]>
數據庫操作的異常捕捉和資源釋放http://www.tkk7.com/zhyiwww/archive/2010/02/09/312421.htmlzhyiwwwzhyiwwwTue, 09 Feb 2010 07:19:00 GMThttp://www.tkk7.com/zhyiwww/archive/2010/02/09/312421.htmlhttp://www.tkk7.com/zhyiwww/comments/312421.htmlhttp://www.tkk7.com/zhyiwww/archive/2010/02/09/312421.html#Feedback0http://www.tkk7.com/zhyiwww/comments/commentRss/312421.htmlhttp://www.tkk7.com/zhyiwww/services/trackbacks/312421.html     public List<Category> queryCategory(String queryStr) throws SQLException {
        ArrayList<Category> catList = new ArrayList<Category>();
        PreparedStatement pstmt = DBUtil.getConnection().prepareStatement(
                queryStr);
        if (pstmt == null) {
            return catList;
        } else {
            ResultSet rst = pstmt.executeQuery();
            while (rst.next()) {
                Category c = new Category();
                c.setCategoryId(rst.getInt("CATEGORY_ID"));
                c.setCategoryName(rst.getString("CATEGORY_NAME"));
                c.setCategoryParent(rst.getInt("PARENT_ID"));
                catList.add(c);
            }

            rst.close();
            pstmt.getConnection().close();

        }

        return catList;
    }

這種方式是不保險的方式,因為此處并不處理異常,但是不排除會發生異常。
假設在黑體代碼部分發生異常,那么下面的代碼并不會執行,也就是說,rst,pstmt,con都不會關閉掉。
所以導致的結果是這些資源得不到釋放。

解決的方法,就是在最后用finally去解決問題

    PreparedStatement pstmt = null;
        ResultSet rst = null;

        try {
            pstmt = this.getPstmt(queryStr);
            rst = pstmt.executeQuery();
            while (rst.next()) {
                Category c = new Category();
                c.setCategoryId(rst.getInt("CATEGORY_ID"));
                c.setCategoryName(rst.getString("CATEGORY_NAME"));
                c.setCategoryParent(rst.getInt("PARENT_ID"));
                catList.add(c);
            }

        } catch (SQLException e) {
            throw e;
        }finally{
            if(rst!=null){
               
                rst.close();
            }
            if(pstmt!=null){
                pstmt.close();
               
            }
            if(this.getCon()!=null&&this.getCon().getAutoCommit()){
                this.getCon().close();
            }
        }

這樣,無論在那個地方發生了異常,都能讓資源得到釋放。






zhyiwww 2010-02-09 15:19 發表評論
]]>
主站蜘蛛池模板: 亚洲日韩欧洲无码av夜夜摸| 国产精品亚洲专区在线播放| www一区二区www免费| 日本特黄a级高清免费大片| 中中文字幕亚洲无线码| 啦啦啦高清视频在线观看免费| 亚洲视频一区在线| 国产成人高清精品免费软件 | 亚洲五月午夜免费在线视频| 国产免费AV片无码永久免费| 亚洲AV日韩AV一区二区三曲| 免费一区二区三区四区五区| 亚洲人成无码网站久久99热国产| 精品特级一级毛片免费观看| 亚洲成a人片在线观看日本麻豆| 一区二区三区免费精品视频| 好吊妞788免费视频播放| 亚洲国产精品无码久久久秋霞1| 日本高清色本免费现在观看| 最近免费中文字幕视频高清在线看| 亚洲人成无码网站| 一二三区免费视频| 亚洲精品~无码抽插| 777爽死你无码免费看一二区 | 黄页网站免费观看| 亚洲国产精品无码久久| 亚洲人成人网站在线观看| 国产一级a毛一级a看免费人娇| 久久亚洲精品国产精品| 在线精品一卡乱码免费| 亚洲videos| 日韩欧美亚洲中文乱码| 亚洲福利精品一区二区三区| 久久狠狠躁免费观看2020| 亚洲精品电影在线| 四虎影视精品永久免费| 99精品视频在线视频免费观看 | 亚洲欧洲日产国产综合网| 免费高清在线影片一区| 精品亚洲AV无码一区二区| 免费一级e一片在线播放|