<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>泡 泡</title>
    <description></description>
    <link>http://chensimiaojava.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>交易中心810问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/227820" style="color:red;">http://chensimiaojava.javaeye.com/blog/227820</a>&nbsp;
          发表时间: 2008年08月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1&nbsp;使用sftp上传或下载文件.</strong><br />在SecureCRT中"连接sftp标签"<br />使用cd 改变Server端目录<br />使用lcd改变本地目录<br />使用get backup-2008-8-03.zip 下载工具<br />使用put backup-2008-8-03.zip 上传工具</p>
<p><strong>4 在linux打包和解压缩</strong><br />打包<br />tar -czvf ziped.tar.gz filepath/*<br />tar -xzvf ziped.tar.gz filepath</p>
<p>-z 使用gzip的filter<br />-c 创建一个新的archive<br />-v verbose<br />-f 指定filename</p>
<p><strong>5 在做替换操作的时候，一定要备份!!</strong></p>
<p><strong></strong></p>
<p><strong>6 配置JIRA发Email，一定要把WEB-INF/lib/ javamail.jar 和activation.java放到common/lib下面。</strong></p>
<p>&nbsp;</p>
<p><strong>10 mvn -DskipTest install 可以让Install不单元测试</strong></p>
<p><strong></strong></p>
<p><strong>12 HessianRefundServiceImpl，Webx里面Hessian的访问方式.</strong></p>
<p>调试的时候遇到的奇怪问题,发现实际上已经设置了，但是运行的时候却是没有设置，可能调试的时候遇到的是两个类，那么在运行的时候，需要观察他的HashCode是否一样。</p>
<p>&nbsp;</p>
<p><strong>14 将TradeManager搞定，</strong><br />能在本地的JBoss中将TradeManager跑起来，如果需要了解Webx的话，可以从TradeManager入手。</p>
<p>&nbsp;</p>
<p><strong>15 问afei搞定notify-1.1.1和notify-1.1-SNAPSHOT的问题</strong><br />主要的问题是在同一个项目的的两个外部依赖使用了不同的依赖关系，比如payway依赖了notify-1.1-SNAPSHOT，而TradeManager依赖了notify-1.1.1，所以会在antx -p RELEASE reactor 的时候出错，依赖关系在repository中设置的。所以需要修改module.xml或</p>
<p>&nbsp;</p>
<p><strong>16 自己在Spring中做一个Hessian的访问，才能够明白里面的技术细节。</strong><br />没做</p>
<p>&nbsp;</p>
<p><strong>17 CC里面关掉Notify消息。</strong><br />在单元测试的时候，是否关闭掉或Mock掉Notify消息。<br />需要在两个地方关掉，RefundManagerImpl和工作流引擎</p>
<p>&nbsp;</p>
<p><strong>18 在Mysql数据库中，创建一个用户jiradb,然后赋给所有的权限，并允许远程访问。</strong><br />create user jiradb identified by 'jiradb';<br />grant select,insert,update,delete on jiradb.* to <a href="mailto:jiradb@'%'">jiradb@'%'</a>;<br />flush privileges;</p>
<p>&nbsp;</p>
<p><strong>19 payway的日志的问题<br /></strong>使用StringBuilder，构建了一个比较漂亮的日志输出。</p>
<p>&nbsp;</p>
<p><strong>20 mvn pom.xml配置</strong><br />将资源文件指定到Resource中<br />&nbsp;&lt;testResources&gt;<br />&nbsp;&nbsp;&lt;testResource&gt;<br />&nbsp;&nbsp;&lt;directory&gt;scr/test/java&lt;/directory&gt;<br />&nbsp;&nbsp;&lt;includes&gt;<br />&nbsp;&nbsp;&lt;include&gt;**/*.xml&lt;/include&gt;<br />&nbsp;&nbsp;&lt;include&gt;**/*.xml&lt;/include&gt;<br />&nbsp;&nbsp;&lt;include&gt;**/*.jpg&lt;/include&gt;<br />&nbsp;&nbsp;&lt;include&gt;**/*.xls&lt;/include&gt;<br />&nbsp;&nbsp;&lt;/includes&gt;<br />&nbsp;&nbsp;&lt;/testResource&gt;<br />&nbsp;&lt;/testResources&gt;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p><strong>21 使用Telnet到服务器上，可以使用下面的命令得到默认页的html</strong><br />GET / HTTP/1.0</p>
<p>&nbsp;</p>
<p><strong>22 通过ProxyPass来访问Apache，允许这3个Module</strong><br />LoadModule proxy_module /opt/taobao/install/httpd/modules/mod_proxy.so<br />LoadModule proxy_connect_module /opt/taobao/install/httpd/modules/mod_proxy_connect.so<br />LoadModule proxy_http_module /opt/taobao/install/httpd/modules/mod_proxy_http.so</p>
<p>&lt;VirtualHost 61.129.70.239&gt;<br />&nbsp;&nbsp;&nbsp; ServerAdmin <a href="mailto:cao@redsaga.com">cao@redsaga.com</a><br />&nbsp;&nbsp;&nbsp; DocumentRoot /home/linkage/site<br />&nbsp;&nbsp;&nbsp; DirectoryIndex index.htm index.html index.php<br />&nbsp;&nbsp;&nbsp; ServerName&nbsp; buytest.redsaga.com<br />&nbsp;&nbsp;&nbsp; ErrorLog logs/buy-redsaga-error_log<br />&nbsp;&nbsp;&nbsp; CustomLog logs/buy-redsaga-access_log combined<br />&nbsp;&nbsp;&nbsp; ProxyPass / ajp://127.0.0.1:18125/buytest/<br />&nbsp;&nbsp;&nbsp; ProxyPassReverse / ajp://127.0.0.1:18125/buytest/<br />&nbsp;&nbsp;&nbsp; ProxyPassReverseCookieDomain buytest.redsaga.com buytest.redsaga.com<br />&nbsp;&nbsp;&nbsp; ProxyPassReverseCookiePath / /<br />&lt;Directory "/home/linkage/site"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride All<br />&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />&lt;/VirtualHost&gt;</p>
<p>&nbsp;</p>
<p><strong>23 查看SVN的版本信息 svn --version，需要2根杠</strong></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/227820#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Wed, 13 Aug 2008 22:11:27 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/227820</link>
        <guid>http://chensimiaojava.javaeye.com/blog/227820</guid>
      </item>
      <item>
        <title>交易三期808问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/227816" style="color:red;">http://chensimiaojava.javaeye.com/blog/227816</a>&nbsp;
          发表时间: 2008年08月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 XiaoerTransferMoeny，少加了一个out_trade_no，</strong><br />没有被单元测试覆盖到的代码，非常容易出错.<br />isSuccess()==false,这个也应该log.error一下，不然测试的时候很难发现问题。<br /><strong>2&nbsp; 设置Mysql编码集</strong></p>
<pre name="code" class="sql">set @@character_set_client = 'GBK';
set @@character_set_connection = 'GBK';
set @@character_set_results = 'GBK';
set @@character_set_database = 'GBK';
set @@character_set_server= 'GBK';</pre>
<p>&nbsp;</p>
<p>3 JIRA连接Mysql<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<pre name="code" class="xml">   &lt;Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false"&gt;
          &lt;Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
            username="root"
            password="yundong"
            driverClassName="com.p6spy.engine.spy.P6SpyDriver"
            url="jdbc:mysql://localhost/jiradb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8"
            minEvictableIdleTimeMillis="4000"
            timeBetweenEvictionRunsMillis="5000"
            maxActive="20" /&gt;
</pre>
<p>&nbsp;4 JIRA 连接Oracle</p>
<pre name="code" class="xml">  &lt;Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false"&gt;
          &lt;Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
            username="jiradb"
            password="jiradb"
            driverClassName="com.p6spy.engine.spy.P6SpyDriver"
            url="jdbc:oracle:oci:@dev-refund"
            connectionProperties="SetBigStringTryClob=true"
            maxActive="20" /&gt;</pre>
<p>&nbsp;</p>
<p><strong>5 建Oracle</strong><br />给一个用户赋给权限，并能访问Oracle表空间。<br />&nbsp;&nbsp; create user jiradb identified by jiradb;<br />&nbsp;&nbsp; grant create session, resource,unlimited tablespace to jiradb</p>
<p>再把这个用户删除，并删除掉这个用户下的所有东西。<br />&nbsp;&nbsp; drop user jiradb cascade;</p>
<p>如果已经有人用这个用户登录到数据库，使用kill -9 id 杀掉连接到数据库的进程<br />如果遇到了数据库死锁，应该怎么做？<br />&nbsp;&nbsp;&nbsp; select spid from v$process where addr in (select paddr fr&nbsp;om v$session where username = upper('jiradb'));<br />再切换到root去，将列出的process 一个一个的杀掉</p>
<p>&nbsp;</p>
<p><strong>6 怎么连接到我们的数据库用Oracle sudo连接上去</strong><br />[root@test164 ~]# su - oracle<br />[oracle@test164 ~]$ sqlplus "/as sysdba"</p>
<p>&nbsp;</p>
<p><strong>7 SqlMap 技巧，dynamic preprend =&nbsp; 可以根据后面的显示来决定是否添加where</strong></p>
<pre name="code" class="xml">&lt;dynamic prepend=" where "&gt;
 &lt;isGreaterThan prepend="and" property="buyerId" compareValue="-1"&gt;&lt;![CDATA[
  buyer_id = #buyerId#
  ]]&gt;&lt;/isGreaterThan&gt;
 &lt;isGreaterThan prepend="and" property="sellerId" compareValue="-1"&gt;&lt;![CDATA[
  seller_id = #sellerId#
  ]]&gt;&lt;/isGreaterThan&gt;
 &lt;isGreaterThan prepend="and" property="refundStatus" compareValue="-1"&gt;&lt;![CDATA[
  refund_status = #refundStatus#
  ]]&gt;&lt;/isGreaterThan&gt;
&lt;/dynamic&gt;</pre>
<p><strong>&nbsp;</strong></p>
<p><strong>8 在同一个JVM中，stastic变量被共享了，所以不能共同使用</strong><br />在用mvn test的时候，static 变量如果被修改了，会导致另外一个测试也出错。所以用<br />protected static final String str="new String";可以保证不能被修改。</p>
<p>&nbsp;</p>
<p><strong>9 在Denali中得到BeanFactory。</strong></p>
<pre name="code" class="java">ServiceManager serviceManager = SingletonServiceManagerLoader.getInstance(DEFAULT_SERVICE_CONFIG_FILE);
BeanFactoryService beanFactory = (BeanFactoryService) serviceManager.getService(BeanFactoryService.SERVICE_NAME);</pre>
<p>&nbsp;</p>
<p><strong>10 将Antx同步到Maven库中</strong><br />登录到10.1.6.166上，运行<br />10.1.6.166&nbsp;&nbsp; root/hello123<br />su - maven<br />/home/maven/module2pom/bin/run.sh<br />将Antx库同步过来<br />访问 <a href="http://10.1.6.166:8081/artifactory/webapp/">http://10.1.6.166:8081/artifactory/webapp/</a> 用admin/taobao123456789 登录<br />Import from path：/home/maven/module2pom/pom/snapshot</p>
<p>&nbsp;</p>
<p><strong>11 重新部署TradeManager</strong></p>
<pre name="code" class="ruby">~/trademanager/bin/deploy.sh update
~/trademanager/bin/deploy.sh compile
killall -9 java
~/trademanager/bin/jbossctl start</pre>
<p>&nbsp;</p>
<p><strong>12 HessianRefundServiceImpl，Webx里面Hessian的访问方式.</strong><br />发现实际上已经设置了，但是运行的时候却是没有设置，可能调试的时候遇到的是两个类，那么在运行的时候，需要观察他的HashCode是否一样。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/227816#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 13 Aug 2008 21:51:24 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/227816</link>
        <guid>http://chensimiaojava.javaeye.com/blog/227816</guid>
      </item>
      <item>
        <title>交易中心626问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/210360" style="color:red;">http://chensimiaojava.javaeye.com/blog/210360</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 Facade-&gt;Service-&gt;Manager-&gt;DAO</strong><br />对单表的操作放在Manger，对复杂的操作放在Service，</p>
<p><strong>2 使用cmd登录mysql数据库。</strong><br />mysql.exe -u root -p</p>
<p><strong>3 mvn 在m2_repo，mvn工程依赖，mvn lib依赖</strong></p>
<p><span style="color: #ff0000;">mvn pom文件的详见</span></p>
<p>&nbsp;</p>
<p><strong>4&nbsp; java.net.URL的中文问题</strong><br />URL xlsUrl = BaseSpringTestCase.class.getResource(xlsFile);<br />URL的具体意义</p>
<p><span style="color: #ff0000;">5 取Oracle前100条</span></p>
<p>&nbsp;</p>
<p><strong>6 OCI的问题，搞了很久都没搞定</strong><br />UnsatisfiedLinkError oci t2cCreateState的问题，我本地的安装了一个Oracle 10.1.0，但是使用的Oracle JDBC驱动是10.2.0，Oracle 要求两者版本一定要一致，导致这个问题的出现，如果出现了，替换驱动程序或，替换本地Oracle客户端，奇怪的是，我设置了Oracle_HOME，完全没有起作用， 将Oracle数据库完全卸载，问题解决。</p>
<p>7 单独做个数据库，连接目标数据库</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">9 preSt.executeBatch()干什么的</span></p>
<p>&nbsp;</p>
<p><strong>10 Spring 中ref local 和 ref bean 的区别</strong><br />据说ref local应用本文件的，<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref bean应用spring的Application Context</p>
<p><strong>11 在window下用命令行删除程序，用双引号把路径引起来。(在机器狗的病毒文件里学的)</strong><br />del "target\site\docbook\tc-refund-core.pdf"</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/210360#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 02 Jul 2008 01:50:20 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/210360</link>
        <guid>http://chensimiaojava.javaeye.com/blog/210360</guid>
      </item>
      <item>
        <title>交易三期619任务</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/210358" style="color:red;">http://chensimiaojava.javaeye.com/blog/210358</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">this.executeQueryForObject("PayOrderDO.getOrderByPayOrderId", payOrderId, dr);</pre>
<p><strong>&nbsp;1 Eclipse Tomcat插件。</strong></p>
<p>url：在Eclipse中部署tomcat</p>
<p><span style="color: #888888;"><span style="color: #ff0000;">2 看有能力写一个&nbsp;Docbook写一个插件，能对Java，Sql语法高亮。</span><br /></span><br /><strong>3&nbsp;在PowerCmd中启动，选择的参数是：/P $(Dir)</strong></p>
<p>&nbsp;</p>
<p><strong>4&nbsp;mvn eclipse:eclipse 会有错误，</strong><br />-DdownloadJavadocs=true，将会下载javadoc和每个jar文件配合。</p>
<p>-DdownloadSources=true，将会下载java源文件和每个jar文件配合。</p>
<p><strong>&nbsp;</strong></p>
<p><strong>5 早上发布pamirs-service完成后，系统抛异常，经确认后发现用户中心jar包版本升级导致。</strong><br />原因：本次用户中心jar包升级为1.3.0 ，但是由于原来的包中 包含了 1.2.0 ，发布时候直接覆盖，并没有去删除原来的版本，<br />导致用户中心的 两个版本的jar包同时存在，使得系统出现异常。</p>
<p><a href="http://confluence.cn.taobao.cn:8080/pages/viewpage.action?pageId=61787" title="Confluence上的链接" class="quote_div" target="_blank">Confluence上的问题</a></p>
<p><strong>8 &nbsp;使用sqlmap连接数据库</strong></p>
<p>给BaseSqlMap基类一个SqlMapSupport类，包装了DataSource，SqlMapClient等东西。</p>
<p><strong>&nbsp;</strong></p>
<p><strong>9&nbsp;SqlMap的xml文档的编写。</strong></p>
<p>sqlmap的xml中，要小小心resultClass,resultMap,等几个参数的配置，其实相当简单的。</p>
<p><strong>&nbsp;</strong></p>
<p><strong>11 建立测试环境遇到的问题。</strong><br />Oracle的Url：jdbc:oracel:thin:@localhost:1521:tccenter<br />从类路径中得到Spring的配置文件的方法，FileSystemXmlApplicationContext是从当前Main的运行目录开始算的。<br />ApplicationContext context = new ClassPathXmlApplicationContext("/spring-persistence.xml");</p>
<p>Sql-map的配置<br />sql-map.xml配置SqlMap配置<br />在sql-map的&lt;sql-map&gt;元素，再配具体的操作</p>
<p>&nbsp;</p>
<p><strong>12 DBA命令</strong><br />建表的表空间是什么？<br />create user tccenter identified by tccenter;<br />drop user tccenter;<br />grand dba[connect,resource] to tccenter;</p>
<p><br /><strong>13&nbsp;SqlMap-config.xml</strong></p>
<pre name="code" class="xml"> &lt;settings cacheModelsEnabled="false" enhancementEnabled="false"
  lazyLoadingEnabled="false" maxRequests="3000" maxSessions="3000"
  maxTransactions="3000" useStatementNamespaces="false"/&gt;
Setting的几个参数的意义。
&lt;sql-map resource=" "/&gt;
&lt;!--typeAlias用来简写--&gt;
&lt;typeAlias alias="order" type="testdomain.Order"/&gt;</pre>
<p><strong>&nbsp;18 sql-map-data.xml</strong></p>
<pre name="code" class="xml">&lt;sqlMap namespace="Person"&gt;
&lt;select id="getPerson" resultClass="examples.domain.Person"&gt;
SELECT PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
&lt;/select&gt;
&lt;/sqlMap&gt;
</pre>
<p>&nbsp;</p>
<p>select sysdate from dual;</p>
<pre name="code" class="sql">select sysdate from dual;
</pre>
<p><strong>查询</strong>&nbsp;</p>
<p>java代码:</p>
<pre name="code" class="java">this.executeQueryForObject("PayOrderDO.getOrderByPayOrderId", payOrderId, dr);</pre>
<p>&nbsp;xml配置:</p>
<pre name="code" class="xml">&lt;select id="PayOrderDO.getPayOrderByOutOrderId" resultMap="PayOrderMap"&gt;
  &lt;![CDATA[SELECT pay_order_id,total_fee,commision_fee,title, FROM tc_pay_order WHERE out_pay_id = #value# and rownum&lt;2]]&gt;
&lt;/select&gt;</pre>
<p>&nbsp;</p>
<p><strong>创建</strong><br />java代码:</p>
<pre name="code" class="java">this.executeUpdate("PayOrderDAO.insertPayOrder", payOrder, dr);</pre>
<pre name="code" class="xml"> &lt;insert id="PayOrderDAO.insertPayOrder"  parameterClass="com.taobao.tc.domain.dataobject.PayOrderDO"&gt;
&lt;![CDATA[
insert into tc_pay_order(pay_order_id, total_fee, commission_fee)values(#payOrderId#,#totalFee#,#commissionFee#)
]]&gt;
&lt;/insert&gt;</pre>
<p>&nbsp;<strong>更新<br /></strong>java代码:</p>
<pre name="code" class="java"> Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();
 map.put("payOrderId", payOrderId);
 map.put("adjustFee", adjustFee);
 int count = this.executeUpdate("PayOrderDAO.updatePayOrderPriceInfo", map, dr);</pre>
<p>&nbsp;<br />xml配置:</p>
<pre name="code" class="xml">&lt;update id="PayOrderDAO.updatePayOrderPriceInfo"&gt;
  &lt;![CDATA[
  UPDATE tc_pay_order SET 
   adjust_fee=#adjustFee#,
  ]]&gt;
  &lt;isGreaterThan property="actualTotalFee" compareValue="0"&gt;
   actual_total_fee=#actualTotalFee#,
  &lt;/isGreaterThan&gt;
  &lt;![CDATA[
   gmt_modified = sysdate
  WHERE pay_order_id = #payOrderId#
   and pay_status = #payStatus#
   ]]&gt;
 &lt;/update&gt;
 </pre>
<p><strong>&nbsp;得到Sequence</strong><br />Java代码：</p>
<pre name="code" class="java">executeQueryForObject("PayOrderDAO.getOrderSeq",null, dr);</pre>
<p>&nbsp;<br />Xml配置：</p>
<pre name="code" class="xml"> &lt;select id="PayOrderDAO.getOrderSeq" resultClass="long"&gt;
  select seq_tc_pay_order_id.nextval from dual
 &lt;/select&gt;</pre>
<p>&nbsp;<br />&nbsp;</p>
<p><strong>20 ResultMap，目的是将一个ResultSet转换成一个JavaBean，然后返回给调用者，</strong></p>
<pre name="code" class="xml">&lt;resultMap class="example.Person" id="PersonMap"&gt;
      &lt;result column="working_place" property="workingPlace" /&gt;
&lt;/resultMap&gt;</pre>
<p>&nbsp;</p>
<p><br /><strong>21&nbsp;OSCache是分布式Cache，EhCache是个很简单的集中式Cache</strong></p>
<p>&nbsp;</p>
<p><br /><strong>22 ToStringBuilder的用法。<br /></strong></p>
<pre name="code" class="java">ToStringBuilder.reflectionToString(person, ToStringStyle.SHORT_PREFIX_STYLE)</pre>
<p>&nbsp;</p>
<pre name="code" class="java">//下面这种用法很少用。
new ToStringBuilder(person).append("name", person.getName()
//如果对安全限制不严，private的属性可以通过reflect得到。
  Field[] fields = clazz.getDeclaredFields(); 
  //可以访问Private的字段
  AccessibleObject.setAccessible(fields, true);
  
  StringBuilder sb = new StringBuilder();
  sb.append("[");
  for (Field f : fields) { 
   
   Object value = f.get(person);
   sb.append(f.getName()).append("=").append(value+",");
  }
  </pre>
<p>&nbsp;</p>
<p><strong>23 用sys/oracle as sysdba连接上去</strong><br />可以用shutdown immediate,startup来关闭和开启数据库。</p>
<p><strong>24 show parameter;查看参数。</strong></p>
<p>新建一个数据库，然后用sys登录进去，建可访问用户和表空间。<br />connect sys/change_on_install as sysdba;<br />connect system/manager as sysdba;<br />连接到SQLPLUS不登录,sqlplus/nolog</p>
<p>&nbsp;</p>
<p><strong>25&nbsp;启动iSQL plus</strong><br />isqlplusctl start<br /><a href="http://localhost:5560/isqlplus">http://localhost:5560/isqlplus</a></p>
<p>&nbsp;</p>
<p><strong>26 10g企业管理器</strong><br />查看企业管理器状态 emctl status dbconsole<br />启动10g企业管理器 emctl start dbconsole<br /><a href="http://localhost:5560/em">http://localhost:5560/em</a></p>
<p>&nbsp;</p>
<p><strong>27&nbsp;linux的Profile文件有什么用</strong></p>
<p><strong></strong>&nbsp;</p>
<p><strong>28&nbsp;Oracle的静态参数文件，pfile，记录了常见的Oracle的启动参数。</strong><br />位置在ORACLE_HOME/database/initOracle9i下面。<br />名字是init%db_name%.ora</p>
<p>&nbsp;</p>
<p><strong>29&nbsp;Oracle动态参数文件，目的是在不重启数据库的前提下修改参数。</strong></p>
<p>&nbsp;</p>
<p><strong>30&nbsp;spool命令的目的是的将标准输出，输出到文件中去。</strong><br />用法是:<br />spool c:\sql\trace_log.log;<br />show parameter;<br />spool off;</p>
<p><br /><strong>31&nbsp;Oracle启动有三种方式</strong><br />a statup nomount 在创建时启动，只创建实例而不打开任何数据库文件<br />b statup mount 在对数据库维护期间使用，<br />c statup open 99%的时间启动。</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">32&nbsp;重做(Redo)控制文件的作用。</span></p>
<p>&nbsp;</p>
<p><strong>33&nbsp;将数据库状态设为只读，比如将Standby数据库设为只读，供后台查询数据库使用。</strong><br />alter database read only;<br />alter database read write;</p>
<p>&nbsp;</p>
<p><strong>34&nbsp;catalog.sql 创建基本数据字典表。</strong><br />Oracle很多的信息都可以从数据字典表中得到，相当与当前数据库的Metadata<br />DDL 数据库定义语言 建库，建表<br />DCL 数据库控制语言 建用户，赋给权限。<br />DML 数据库操作语言 insert, delete, 这种。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><br />&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/210358#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Wed, 02 Jul 2008 01:40:25 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/210358</link>
        <guid>http://chensimiaojava.javaeye.com/blog/210358</guid>
      </item>
      <item>
        <title>学习Jbmp笔记</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/210357" style="color:red;">http://chensimiaojava.javaeye.com/blog/210357</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java"> InputStream is = java.util.Date.class.getResourceAsStream("Collection.class");</pre>
<p>&nbsp;&nbsp;</p>
<p><strong>1 &nbsp;JBPM的子流程是怎么工作的？</strong></p>
<p><span style="color: #ff0000;">没有做</span></p>
<p>2 B2C也是担保交易，支付宝压款是完全可以接受的。</p>
<p>3 在退款协议期可能会有死循环，所以要介入人工处理阶段。人工处理应该是数据库定时JOB，将超时的任务导出到到后台小二的job list，子流程处理也要返回两个结果，退或不退，来判断是否退款是否结束</p>
<p><strong>4 JBPM的任务节点(task-node)</strong><br />任务节点是一个需要人工参与的节点，当流程进入节点，会生成相应的任务实例(task instance),并通过实现某个委派接口AssignHandler或jBPM表达式将任务委派给参与者，在界面上，需要根据参与者角色生成某个按钮，参与者按了后，节点才会进入下一个流程。节点进入等待状态，知道任务被参与者完成或跳过，过程才会继续。<br /><em>判定节点(decision)</em><br />判定节点的设计目标是根据上下文环境和程序逻辑来判定流程转向。通过指定的DecisionHandler接口的实现类或jBPM表达式，返回transition字符串名称。来决定流程的方向。<br /><em>普通节点(node)</em><br />普通节点也可以处理定义的相应的处理任务，通过实现的ActionHandler的类。同任务节点不同的是，普通节点定义的任务是自动执行的，而不需要人工来点，比如通知消息。<br />&nbsp;可以定义成一个Node节点，在时间发生后，发Email或wangwang消息。或退款成功，通知支付宝按退款协议给双方打款，也可以做成一个Node节点。<br /><strong>5&nbsp;Node，TaskNode，Decision上都可以挂接EventNode，<br /></strong>三种结点都可定义结点事件（event）：&nbsp;<br />&nbsp;node-enter，该事件在流程进入结点时触发&nbsp;<br />&nbsp;node-leave，该事件在流程离开节点是触发&nbsp;<br />&nbsp;可以在事件上挂接ActioinHandler接口的实现类来完成一些特定的功能。&nbsp;<br />&nbsp;在EventNode中，写ActionHandler的实现类，从而自动完成一些任务，比如发邮件等任务。</p>
<p><br /><strong>6&nbsp;NodeTask的具体定义，几个参数是什么意思？&nbsp;<br />比如General，Detail，Assignment，Controller，Reminder分别代表什么意思。</strong></p>
<p>&nbsp;</p>
<p><strong>7 JPML中最常用的几个程序回调接口</strong><br /><em>动作处理接口ActionHandler，在需要evnet，antion的地方回调</em><br />interface ActionHandler{<br />&nbsp;&nbsp;&nbsp; void execute(ExecutionContext executionContext) throws Exception;<br />}<br />该接口通过执行上下文ExecutionContext来了解当前的状态，比如节点处的位置，买卖双方的信息等。</p>
<p><em>判定接口(DecisionHandler)</em><br />public interface DecisionHandler extends Serializable {<br />&nbsp; String decide(ExecutionContext executionContext) throws Exception;<br />}<br />会返回一个字符串，在这个节点，根据字符串，决定往哪个transision分支走。</p>
<p><em>委派处理接口（AssignmentHandler）</em> </p>
<p>接口方法：void assign(Assignable assignable, ExecutionContext executionContext) throws Exception; </p>
<p>适用于TaskNode中新增的Task节点，对应的是Assignment的Tab，他的作用是将Task委派给指定的人员或角色。</p>
<p>委派处理接口被用户任务元素(task)的委派(assignment)子元素中，它的职责很明确，就是将任务分配给指定的人员或角色。 <br />&nbsp;在AssignmentHandler接口的方法中，Assignable变量通常指任务实例(TaskInstance)。通过将ExecutionContext和TaskInstance两个变量都暴露给接口方法，用户就可以根据流程上下文情况，来决定要将指定的任务分配个谁。 </p>
<p>作用于Node和作用于transision的handler虽然都是继承自同一个接口ActionHandler，但是Node的execute的方法内，必须执行executionContext.leaveNode来保证流程的向下执行，而transition不用使用这个方法。</p>
<p><strong>8&nbsp;一个TradeProcessConstans类，来包装所有字符串常量。</strong></p>
<p>我们对Jbpm的封装</p>
<p><strong>9&nbsp;当流程开始的时候，创建流程常量。</strong><br />&nbsp;&nbsp; </p>
<pre name="code" class="java">  protected void createProcessInstance(String user){
        //生成实例
     pi = pdf.createProcessInstance();
     //设置流程发起人
     pi.getContextInstance().createVariable("initiator", user);
     //触发流程转向
     pi.signal(); //进入流程的第一个节点，会触发第一个Transision。
                     //新建一个ProcessInstance，会自动触发这步，但是，因为系统升级的过程中，有的流程是正在退款的过程中，所以，对这种流程要判断，并且要赋给它一个初始的状态。
    }</pre>
<p>&nbsp;<br />&nbsp;&nbsp;&nbsp; 当用户提交借款申请。<br />&nbsp;&nbsp;&nbsp; 当经理审批通过，是经理在界面点击通过或不通过的按钮，业务层调用：</p>
<pre name="code" class="java">    TaskInstance ti = pi.getTaskMgmtInstance().getInstance().iterator().next();
    ti.end("部门经理审批通过");</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 如果如果点击不通过。<br />&nbsp;&nbsp;</p>
<pre name="code" class="java">  ti.end("部门经理审批不通过");</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 打印出TaskInstance所有的向下的支路.</p>
<pre name="code" class="java">  List&lt;Transistion&gt; transitions = ti.getToken.getNode().getLeavingTransitions();
    for(Transition t : transitions){
        sysout(t.getName());
    }</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 进入TaskNode节点，会自动回调TaskNode的Task节点的AssignHandler和ControllerHandler，决定流程如何向下一个节点流转。&nbsp;&nbsp;<br />&nbsp;<br /><strong>10 executionContext.getContextInstance.getVarable();<br /></strong>可以把OrderID或外部ID，用户ID等放到varable中去，并持久化到数据库。</p>
<p><strong>11 超时是应用层考虑还是数据库层考虑，这里放到一边。</strong><br />设计的结果是应用层考虑超时。</p>
<p><strong>12&nbsp;借款的流程顺序。</strong></p>
<p>第一个Transision，StartProcessActionHander<br />第二个回调：在提交支款申请里面,DepartmentManagerHandler<br />第三个回调：AssignmentHandler，进入部门经理审批流程，将这个审批任务分配给一个或一群人。调用这个Handler来调用：DepartmentManagerApproveAssignmentHandler来进行分配。<br />第4个回掉:ActionHandler的回调，在审批同意的Transition里回调<br />ManagerApprovedAction<br />第5个回调，在部门经理审批同意后，看金额是否大于6000，决定是否上调给总经理审批。<br />如果小于5000，自动执行小于5000的Transition，在DecideNode，不需要等待，直接执行。执行"&lt;5000 财务拨款"Transition,进入下一个Node"财务拨款"。</p>
<p>问题，在这个过程中，如果保证事务，如果一个节点失败了，是否要进行回滚，和如何进行回滚，JBPM有机制来保证这个过程吗？</p>
<p>第6个回调，流转到"财务拨款",财务拨款是个Node，系统自动调用，而不需要人工参与。<br />Node和TaskNode中的Action不同的是，NodeAction的execute最后必须调用</p>
<pre name="code" class="java">  /*
   * 这句别漏了，否则流程不会向下走哒
   */
  executionContext.leaveNode();</pre>
<p>&nbsp;不然，流程不会向走。<br />第7个回调，Trasition流转到邮件通知这步，流转调用SendMailActionHandler，，其实邮件通知可以在BenforeNode和LeaveNode里面用Event来做，也是一种方法。</p>
<p>&nbsp;</p>
<p><strong>13&nbsp;ProcessDefinition<br />&nbsp;&nbsp; --ProcessInstance<br />&nbsp;&nbsp; ----TaskInstance<br />&nbsp;&nbsp; ------Token<br />&nbsp;&nbsp; --------Node<br />&nbsp;&nbsp; ----------Transition</strong></p>
<p><strong></strong>&nbsp;</p>
<p><span style="color: #ff0000;">14&nbsp;JbpmContext的用处。</span></p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">15&nbsp;怎么在Jbpm中使用单元测试。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;">16&nbsp;&nbsp;怎么在mysql指定的数据库上创建一个用户名密码，并且把所有或部分的权限赋给他。</span></p>
<p>&nbsp;</p>
<p><strong>17&nbsp;部署Jbpm</strong></p>
<p>调用ProcessDefinition，将其在内存中生成，并部署到MySql中去。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong>18&nbsp;class.getResourceAsStream 是以当前目录为基础，得到InputStream.</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />可以用</p>
<pre name="code" class="java"> InputStream is = java.util.Date.class.getResourceAsStream("Collection.class");</pre>
<p>&nbsp;得到了InputStream就可以用ClassLoad将类重新载入内存了。</p>
<p><strong>19 怎么得到ClassPath的路径,实际上，需要的是类路径上的配置文件。</strong></p>
<pre name="code" class="java">Class.getResourceAsStream("/log4j.properties");
Class.getClassLoader.getResourceAsStream("log4j.properties");</pre>
<p><strong>20 使用EmEditor的技巧。</strong><br />怎么在每一行某位加一个";"，比如在数据库脚本？<br />查找(^[^--]*$)&nbsp; 表示所有不以--开头的行，用()将他们括起来，是为了back reference(向后引用),将他们替换成\0;表示将前面查到的所有都替换，并且在末尾加一个;<br />怎么删除空行？<br />查找^[ \t]*$\r\n,并将他们替换为空.</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/210357#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 02 Jul 2008 01:17:59 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/210357</link>
        <guid>http://chensimiaojava.javaeye.com/blog/210357</guid>
      </item>
      <item>
        <title>CruiseControl的配置文件config.xml</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/210351" style="color:red;">http://chensimiaojava.javaeye.com/blog/210351</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;配置文件的具体意义不太清楚，需要有时间认真的开下CC的Document，先列在这里，以供以后查询</p>
<pre name="code" class="xml">&lt;project name="hsf" buildafterfailed="true"&gt;
       &lt; listeners&gt;
            &lt;currentbuildstatuslistener file="logs/hsf/status.txt"/&gt;
        &lt;/listeners&gt;

        &lt;bootstrappers&gt;
            &lt;svnbootstrapper localWorkingCopy="hsf/hsf" /&gt;
        &lt;/bootstrappers&gt;

        &lt;modificationset quietperiod="300"&gt;
            &lt;svn localWorkingCopy="hsf/hsf"/&gt;
        &lt;/modificationset&gt;

        &lt;schedule interval="5400"&gt;
            &lt;maven2 mvnhome="/home/admin/tools/apache-maven-2.0.8" pomfile="hsf/hsf/pom.xml" goal="clean install"/&gt;
        &lt;/schedule&gt;

        &lt;log&gt;
            &lt;merge dir="hsf/hsf/consumer.default/target/surefire-reports"/&gt;
            &lt;merge dir="hsf/hsf/provider.default/target/surefire-reports"/&gt;
            &lt;merge dir="hsf/hsf/common/target/surefire-reports"/&gt;
            &lt;merge dir="hsf/hsf/test.consumer.spring/target/surefire-reports"/&gt;
            &lt;merge dir="hsf/hsf/test.provider.spring/target/surefire-reports"/&gt;
        &lt;/log&gt;

        &lt;publishers&gt;
            &lt;htmlemail mailhost="ssl.alibaba-inc.com" charset="GBK" mailport="465" username="" password="" returnaddress="" subjectprefix="[HSF CI]" usessl="true"&gt;
       &lt;map alias="yundong" address=""/&gt; 
                         &lt;/htmlemail&gt;
        &lt;/publishers&gt; 
</pre>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/210351#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 02 Jul 2008 00:24:35 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/210351</link>
        <guid>http://chensimiaojava.javaeye.com/blog/210351</guid>
      </item>
      <item>
        <title>经常用的Ant任务</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/210350" style="color:red;">http://chensimiaojava.javaeye.com/blog/210350</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1 使用常见的Ant任务</p>
<pre name="code" class="xml">&lt;target name="db:create" depends="filterSqlFiles" description="Create the database definition"&gt;
 &lt;sql
  driver="com.mysql.jdbc.Driver"
  url="jdbc:mysql://localhost:3306"
  userid="root"
  password="root"
  classpathref="db.lib.path"
  src="${filtered.sq.dir}/database-defination.sql"
  delimiter="//"/&gt;
&lt;/target&gt;</pre>
<p>&nbsp;<br />2 delete任务</p>
<pre name="code" class="xml">&lt;delete file="c:\tmp" /&gt;</pre>
<p>&nbsp;&nbsp;<br />3 jar任务</p>
<pre name="code" class="xml">&lt;jar destfile="${jarName}"&gt;
  &lt;fileset dir="classes" /&gt;
&lt;/jar&gt;</pre>
<p>&nbsp;</p>
<p>4 scp(shell copy)任务</p>
<p>需要将这3个jar放在classpath</p>
<ul>
<li>jsch.jar</li>
<li>commons-net.jar</li>
<li>commons-codec.jar</li>
</ul>
<pre name="code" class="xml">&lt;scp todir="admin:fuwei@192.168.206.134:~/vbird" trust="true"&gt;
  &lt;fileset file="研究交易三期PRD.txt" /&gt;
  &lt;fileset dir="工作流引擎"/&gt;
&lt;/scp&gt;</pre>
<p>&nbsp;</p>
<p>5 sshexec(shell execute)任务</p>
<pre name="code" class="xml">&lt;sshexec host="192.168.207.170" username="hadoop" password="hadoop" trust="true" command="cd /; ls -aF" /&gt;</pre>
<p>&nbsp;</p>
<p>6 ftp任务</p>
<pre name="code" class="xml">&lt;ftp server="192.168.207.170" userid="hadoop" password="hadoop" remotedir="hdfile/src/loganalyse/HadoopLogAnalyse"&gt;  
   &lt;fileset dir="src" /&gt;
&lt;/ftp&gt;</pre>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/210350#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Wed, 02 Jul 2008 00:18:41 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/210350</link>
        <guid>http://chensimiaojava.javaeye.com/blog/210350</guid>
      </item>
      <item>
        <title>持续集成笔记</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/208415" style="color:red;">http://chensimiaojava.javaeye.com/blog/208415</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关注将交易三期退款核心放到CC服务器上去，每次commit做持续集成。</p>
<p>中间需要做很多的事情，比如，单元测试环境的隔离，对Payway的Mock，代码静态检查，争取在这个项目8月底完成后，能够对持续集成有一个完整的了解和认识。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 读《持续集成-软件质量改进与风险降低之道》的笔记。</p>
<p>1 持续集成常用的Ant任务：<br />sql任务：</p>
<pre name="code" class="xml">&lt;target name="db:create"&gt;
 &lt;sql driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3360:jiradb"
  urserid="root"
  password="sa"
  classpathref="db.lib.path"
  delimiter=";"&gt;
  &lt;fileset file="${database.dir}/drop-database.sql"/&gt;  
  &lt;fileset file="${database.dir}/create-database.sql"/&gt;  
 &lt;/sql&gt;
&lt;/target&gt;</pre>
<p>&nbsp;<br />JUnit任务:</p>
<pre name="code" class="xml">&lt;target name="run-test"&gt;
	&lt;mkdir dir="${logs.junit.dir}"/&gt;
	&lt;junit fork="yes" 
		     haltonfailure="true"
		     dir="${basedir}"
		     printsummary="yes"&gt;
		&lt;classpath refid="test.class.path"/&gt;
		&lt;classpath refid="project.class.path"/&gt;
		&lt;batchtest fork="yes" todir="${logs.junit.dir}"&gt;
			&lt;fileset dir="${test.unit.dir}"&gt;
				&lt;patternset refid="test.sources.pattern" /&gt;
			&lt;/fileset&gt;
		&lt;/batchtest&gt;
		&lt;classpath refid="test.class.path"/&gt;
	&lt;/junit&gt;
	&lt;junitreport&gt;
	&lt;/junitreport&gt;	
&lt;/target&gt;</pre>
<p>&nbsp;<br />静态代码审查 checkstyle：</p>
<pre name="code" class="xml">&lt;target name="run-checkstyle"&gt;
 &lt;taskdef resource="checkstyletask.properties" classpath="${checkstyle.jar}"/&gt;
 &lt;checkstyle config="${basedir}/checkstyle-rules.xml" failOnViolation="false"&gt;
  &lt;formatter toFile="${checkstyle.data.file}" type="xml"/&gt;
  &lt;fileest dir="src" includes="**/*.java"&gt;&lt;/fileest&gt;
 &lt;/checkstyle&gt;
 &lt;xslt taskname="checkstyle" in="checkstyleDataFile"
  out="checkstyle/reportFile"
  style="checkstyle.xml"/&gt;
&lt;/target&gt;</pre>
<p>&nbsp;<br />将生成的War部署到Tomcat</p>
<pre name="code" class="xml">&lt;target name="run-deploy"&gt;
 &lt;cargo containerId="tomcat5x" action="start" wait="false" id="${tomcat-refid}"&gt;
  &lt;zipurlinstaller installurl="${tomcat-installer-url}"&gt;&lt;/zipurlinstaller&gt;
  &lt;configuration type="standalone" home="${tomcatdir}"&gt;
   &lt;property name="cargo.remote.username" value="admin"&gt;&lt;/property&gt;
   &lt;property name="cargo.remote.password" value="admin"&gt;&lt;/property&gt;
   &lt;deployable type="war" file="${wardir}/${warfile}"&gt;&lt;/deployable&gt;
  &lt;/configuration&gt;
 &lt;/cargo&gt;
&lt;/target&gt;</pre>
<p>&nbsp;</p>
<p>清楚简洁的代码和适当的类名，方法名，参数名是最好的文档。<br />生成docbook文档 mvn taobaodoc:transform</p>
<p>最佳实践：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/208415#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Fri, 27 Jun 2008 00:01:18 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/208415</link>
        <guid>http://chensimiaojava.javaeye.com/blog/208415</guid>
      </item>
      <item>
        <title>Linux shell的问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/206843" style="color:red;">http://chensimiaojava.javaeye.com/blog/206843</a>&nbsp;
          发表时间: 2008年06月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 grep的几个参数</strong></p>
<pre name="code" class="ruby">-a 在二进制中以文本方式Search
-c 计算次数
-v 输出不匹配的行
-n 输出行号</pre>
<p>&nbsp;</p>
<p><strong>2 javascript用正则表达式来写trim函数</strong></p>
<p>str.replace(/(^/s)|(/s$)/g,"")</p>
<p><strong></strong></p>
<p><br /><strong>3 var re =</strong><br />* 重复0到多个前一个字符<br />+重复1到多个前一个字符</p>
<p><br /><strong>4 egrep 高级正则表达式。</strong><br />.除了\t\n\r等剩下的其他字符。<br />\d数字<br />\D非数字<br />\s空格<br />\S非空格<br />\w字符<br />\W非字符<br />(?=...) Positive lookahead<br />(?!...) Negative lookahead.</p>
<p>&nbsp;</p>
<p><strong>5&nbsp;写个Shell脚本运行同步程序。</strong><br />在Linux下运行Java(注意用冒号来分割，并且将cp括起来,linux下分号表示命令结束，需要另起一行) <br />java -cp "WEB-INF/classes:WEB-INF/lib/common-logging-1.2.4.java" com.taobao.jirautil.SyncMain</p>
<p>&nbsp;</p>
<p><strong>6 Linux下设置环境变量</strong><br />PATH="PATH":~/bin<br />export PATH</p>
<p><br /><strong>7 数值计算</strong><br />total=$((aa*bb))//记得中间没有任何空格分割<br /><strong>8 使用test -参数来判断</strong><br />#1 test string<br />test -z $fileName &amp;&amp; echo "you MUST input a filename." &amp;&amp; exit 0<br />#2 test fileName<br />test ! -e $fileName &amp;&amp; echo "the file $fileName MUST exist." &amp;&amp; exit 0<br />#3 find file property<br />test -f $fileName &amp;&amp; fileType="file"<br />test -d $fileName &amp;&amp; fileType="directory"<br />test -r $fileName &amp;&amp; perm="readable"<br />test -w $fileName &amp;&amp; perm="$perm writable"<br />test -x $fileName &amp;&amp; perm="$perm excutable"<br />echo "$fileName is a $fileType,the permission is $perm"</p>
<p><br /><strong>7 Shell命令。</strong> <br />kill -KILL(必杀) PID<br />netstat -antp<br />all numeric trimming program</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/206843#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 22 Jun 2008 15:29:57 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/206843</link>
        <guid>http://chensimiaojava.javaeye.com/blog/206843</guid>
      </item>
      <item>
        <title>研究JBPM的用法</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/206840" style="color:red;">http://chensimiaojava.javaeye.com/blog/206840</a>&nbsp;
          发表时间: 2008年06月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1&nbsp;将JBPM的配置文件打包成ZIP，并从zip中解出来，然后导入到数据库去。</strong></p>
<pre name="code" class="java">  ZipInputStream zipInputStream = new ZipInputStream(LoadClassFromArchieve.class.getResourceAsStream("simpleProcess.war"));
  JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
  JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
  try {
   //   ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
   //   jbpmContext.deployProcessDefinition(processDefinition);
   GraphSession grapSession = jbpmContext.getGraphSession();
   ProcessDefinition processDefinition = grapSession.findLatestProcessDefinition("simple");
   grapSession.deleteProcessDefinition(processDefinition);
  } catch (Exception e) {
    e.printStackTrace();
  }finally{
    jbpmContext.close();
    zipInputStream.close();
  }</pre>
<p>&nbsp;<br /><strong>2 Jbpm的一个流程开始代码。</strong></p>
<pre name="code" class="java"> //jbpmContext是用来保准Hibernate 事务的，主要是和事务打交道。
 JbpmContext jbpmContext = JbpmConfirguration.CreateJbpmContext();
 try{
    GraphSession graphSession = jbpmContext.getGraphSession();
    ProcessDefinition pdf = graphSession.findLastestProcessDefinition("processDefinistion");
    pi.getContextInstance().createVariable("newVariable",newVariable);
    pi.signal();
    jbpmContext.save(pi);
 }finally{
     jbpmContext.close();
 }</pre>
<p>&nbsp;<br /><strong>3&nbsp;怎么从数据库得到一个ProcessIntance。</strong><br />&nbsp;将ProcessInstanceId作为参数放在订单里面，里面记录了订单当前的所处的jbpm的状态。<br />&nbsp;从ProcessIntance中得到TaskInstance，调用TaskIntance.end("applyRefund");就可以将流程走下去。<br />&nbsp;<br /><strong>4&nbsp; Token的作用是什么。</strong><br />&nbsp; ProcessInstance中RootToken的作用是什么。<br />&nbsp; Node在JBPM中处的位置<br />&nbsp; Node代表的是TaskNode，Decision和Node，表示流程所处的一个状态，可以在Node上挂Task或Action的回调函数。完成业务自己的功能。<br />&nbsp; TaskIntance的作用是什么？</p>
<p><br /><strong>5&nbsp;Profile.enter("流程开始！");将执行的时间，保存在一个ThreadLocal里面，最后才用StringBuilder将其统计出来。<br />&nbsp;<br />7 怎么根据流程名字，直接得到将当前的ProcessIntance在内存中重建。</strong><br />&nbsp;Node curNode = processDefinition.getNode("总经理审批");<br />&nbsp;processIntance.getRootToken().setNode(curNode):<br />&nbsp;processIntance.signal();//触发状态转移。</p>
<p><br /><strong>8&nbsp;&nbsp; fwei只用了一个表来保存流程的当前状态，主要保存的有：</strong><br />&nbsp;流程的业务ID，业务Type，ProcessDefinition名，ProcessDefinition版本,流程的上下文参数，比如本流程需要借款，借款的金额，借款的单位，会表示成Map，dump成 名值对 数据库的Process_Context字段中去。<br />&nbsp;<br /><strong>9 错误输入:"流程["+processName+"]不存在!";</strong></p>
<p>19 iBatis 可能需要写点小程序来把大部分情况用熟悉。包括如何搭建环境，如何写SqlMap DAO。<br />&nbsp;<br /><strong>10 开发工程师的职责：</strong><br />理解交易三期的商业需求和产品的方向和目标。<br />撰写系统UC，完整描述系统过程，边界条件，输入输出等，对具体实现的功能需求负责；<br />撰写系统设计说明书；<br />撰写系统设计文档，对系统设计方案负责；<br />写单元测试；<br />编码实现；</p>
<p>&nbsp;</p>
<p><strong>11 &nbsp;将Map的Key按字符串顺序排列。</strong><br />List&lt;String&gt; keys = new ArrayList&lt;String&gt;(params.keySet());<br />Collections.sort(keys);</p>
<p><br />&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/206840#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 22 Jun 2008 15:23:47 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/206840</link>
        <guid>http://chensimiaojava.javaeye.com/blog/206840</guid>
      </item>
      <item>
        <title>用户中心618问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/205553" style="color:red;">http://chensimiaojava.javaeye.com/blog/205553</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 昨天写的文件Copy</strong></p>
<pre name="code" class="java">InputStream classpathIs = CopyJar.class.getResourceAsStream("/.classpath");
//也可以这么写
InputStream classpathIs = CopyJar.class.getResourceAsStream("/.classpath");
//下面这么写是正确的，
InputStream classpathIs = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/apache/commons/logging/Log.class");
</pre>
<p>&nbsp;虚拟机就用用这个方法来加载字节码，然后链接的。<br />从Classpath中加载资源，比如可以加载.class文件，但是不能从Classpath之外的路径加载资源。<br /><strong>2 使用jdom读取xml</strong></p>
<pre name="code" class="java">SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(classpathIs);
List&lt;Element&gt; lst = doc.getRootElement().getChildren();
Element.getAttribute()
Element.getAttributeValue()
</pre>
<p><strong>&nbsp;3 复制文件,先读取一个InputStream，然后输出一个OutputStream</strong></p>
<pre name="code" class="java">InputStream is = new FileInputStream(inputPath);
File file = new File(outputPath);
if(file.isExist()) {
 file.delete()
 file.createNewFile();
}
while(is.avialiable()!=0){
 byte[] buffer=new byte[1024*100];
 is.read(buffer);
 os.write(buffer);
}
is.close();
os.close();
</pre>
<p>&nbsp;读文件的主要瓶颈还是在打开文件，关闭文件上，文件Copy不是非常费时。<br />新开一个FileOutputStream，可以覆盖掉原来的File。</p>
<p><strong>4今天遇到的在Tomcat里面ClassNotDef问题。(没有解决)</strong></p>
<p><strong>5WebService。使用AXIS或CXF(等到周末有时间来搞一搞)<br />6MVN的插件编写，看能不能写一个直接打包，打包后，能直接放到Tomcat里面去的插件。<br />7&nbsp;mvn taobaodoc:transform</strong><br />&nbsp;&nbsp; mvn eclipse:eclipse <br />&nbsp;&nbsp; mvn eclipse:clean</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/205553#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Wed, 18 Jun 2008 22:21:51 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/205553</link>
        <guid>http://chensimiaojava.javaeye.com/blog/205553</guid>
      </item>
      <item>
        <title>200806需要学习的东西</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/203915" style="color:red;">http://chensimiaojava.javaeye.com/blog/203915</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: #000000;">1 、精通SQL&amp;PL/SQL的编程（先把Oracle DBA基础教程在六月份的两周之内看完，然后是Oracle 10g编程艺术和构件高可用的Oracle环境。</span></p>
<p><br /><span style="color: #333399;">2 、熟悉shell编程，在下周内，把定时重启，Shell脚本基本的命令熟悉，能够写简单的Shell脚本。</span></p>
<p><br /><span style="color: #000000;">3、计算机网络，阅读传输层，应用层，网络安全3章，有时间把IP层看下，为下一步看TCP/IP协议栈有个了解的基础。</span></p>
<p><br /><span style="color: #000000;">4、Concurrency In Action这本书需要看，但是最近的工作都和并发无关，和工作流，数据库关系比较大，所以将其优先级降低。</span></p>
<p><br /><span style="color: #333399;">5、《Java编程思想》里面关于并发的一章在这周搞定。</span></p>
<p><br /><span style="color: #000000;">7、看UIC并且问开发者问题，几个关键点，比如如何做单元测试，如何使用动态代理拦截客户端请求，并且封装客户端的请求，传递到服务端，如何将NIO的异步消息转为同步IO。</span></p>
<p><br /><span style="color: #333399;">8、研究JBoss，MicroKenrel，MicroKernal、JMX、JBoss测试框架，将JBoss的英文文档看完。这需要在项目中用到JBoss，先把JBoss用熟，再去想怎么在上面利用他的特性做开发。</span></p>
<p><br /><span style="color: #333399;">9、这两个月先将这些技术用会，然后在想一些underlying的东西。<br />比如ClassLoading，动态代理，Mina，JBoss，JMX，Hessian，JBPM，Java垃圾收集，Java内存分配，虚拟机</span></p>
<p><br /><span style="color: #333399;">10、用JBPM将流程设计完成后，需要考虑到流程的升级和变化可能造成的影响。</span></p>
<p><br /><span style="color: #000000;">11、Tomcat实现了什么东西？<br />Tomcat的文档里面有类加载，动态代理，MBean，集群，Load Balance,连接器，监视器，日志等东西，Maven， 我们如果要做一个服务端程序，需要做到类似与tomcat的机制，只是不是一个JSP容器，他处理连接的其他方面都有借鉴的意义。</span></p>
<p><br /><span style="color: #000000;">12 JDK源代码里面需要关注的地方。<br />HashMap，ConcurrencyHashMap，AbstractQueuedSynchronizer</span></p>
<p>&nbsp;</p>
<p>13 算法，《算法导论》和《编程之美》，里面关于Hash，Index的算法可以参考。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/203915#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Mon, 16 Jun 2008 01:22:26 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/203915</link>
        <guid>http://chensimiaojava.javaeye.com/blog/203915</guid>
      </item>
      <item>
        <title>交易中心610的问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/203246" style="color:red;">http://chensimiaojava.javaeye.com/blog/203246</a>&nbsp;
          发表时间: 2008年06月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 Mysql 如何将访问mysql的sql语句输出到一个文件？</strong> <br />在my.ini里，增加一行 </p>
<pre name="code" class="sql">log=E:/mysqllog/query.log</pre>
<p>&nbsp;mysql会自动将log输出到log文件里面去。 <br /><strong>得到mysql中某一个表的全部字段。</strong></p>
<pre name="code" class="sql">SHOW FULL COLUMNS FROM `upgradehistory` FROM `jiradb` LIKE '%'</pre>
<p>和</p>
<pre name="code" class="sql">describe table 'users' </pre>
<p><strong>2 Maven</strong> <br /><strong>使用Maven创建一个资源</strong> <br />mvn archetype:create -DgroupId=com.efn -DartifactId=UIC <br /><strong>创建一个Eclipse工程</strong> <br />mvn eclipse:eclipse -DdownloadSources=true <br /><strong>3 Maven的POM结构。</strong> </p>
<pre name="code" class="xml">&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;com.taobao&lt;/groupId&gt;
  &lt;artifactId&gt;UIC&lt;/artifactId&gt;
  &lt;packaging&gt;jar&lt;/packaging&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;UIC&lt;/name&gt;
  &lt;url&gt;http://maven.apache.org&lt;/url&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;junit&lt;/groupId&gt;
      &lt;artifactId&gt;junit&lt;/artifactId&gt;
      &lt;version&gt;3.8.1&lt;/version&gt;
      &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
</pre>
<p>目录结构是 <br />junit <br />|--junit <br />|----3.8.1 <br /><br /><strong>4 Spring中的Name和id有什么区别</strong> <br />Spring中的id不能重复，Name可以重复，都可以getBean通过Name或id来得到。 <br /><br /><strong>5 ApplicationContext ctx = new ClassPathXmlApplicationContext(paths);</strong> <br />可以自己操作Spring的ApplicationContext </p>
<p><br /><strong>6 Hessian的通信机制和设计要点。</strong> <br />了解Hessian实现的技术细节。 <br />为什么Hessian被称为轻量级的远程调用，Hessian的轻量级体现在什么地方？ <br />Hessian是怎么将调用解析，然后转到服务端的。 <br />在客户端将超时时间设为5秒。 <br /><strong></strong></p>
<p><span style="color: #ff0000;"><strong>7 TCMessageConverter是用来做什么的？ <br />8 AbstractBasePacket是什么？ <br />9 客户端怎么调用HSF调用的。</strong>TC的三个问题，看代码</span> <br /><br /><strong>10 domain分为</strong> </p>
<ul>
<li>dataobject(和数据库表对应)， </li>
<li>query(封装查询条件), </li>
<li>result(返回给client的结果) </li>
</ul>
<p><strong>11 server端，biz包的内容:</strong> <br />两个基础的Manager方法： <br />orderManager,订单服务，更新买家做出的评价，更新物流订单属性，还有就是查询订单服务。 <br />tradeManage,交易服务,创建交易,买家打款,卖家发货,买家确认收货等. </p>
<ul>
<li><em>biz.alipay:</em> <br />Payway回调函数，实现了Callback接口。 </li>
<li><em>biz.impl:</em> <br />tradeManger接口的具体实现，有预定金交易和担保交易两种实现。 </li>
<li><em>biz.logistics</em> <br />物流Hessian接口。 </li>
<li><em>dao</em> <br />数据访问层 </li>
<li><em>dao.file</em> <br />集中处理了留言信息等TC和TFS打交道的地方。 </li>
<li><em>dao.ibatis</em> <br />处理了通过ibatis访问数据库的操作。 </li>
<li><em>dao.jdbc</em> <br />主要处理了通过jdbc查询订单等的操作。 </li>
<li><em>dao.uic</em> <br />访问用户中心的情况 </li>
<li><em>dao.dataimport</em>记录的什么？ </li>
<li><em>dao.service.impl</em> <br />记录了客户端FactoryBean代理的业务的具体示现。 </li>
<li><em>web</em> <br />通过SpringMVC开放出去的Controller。比如开放给支付宝回调的函数。</li>
</ul>
<p>11 突然觉得Ebay的那片<a href="http://www.infoq.com/articles/ebay-scalability-best-practices" target="_blank">文章</a>写得好，Scale的几个要点，比如拆分，走缓存，虚拟化，分层，使我们正在做，或者将要做的。 <br /><br /><strong>12 阅读《鸟哥的Linux私房菜》Shell，RE两章</strong> <br />设置bash变量 </p>
<pre name="code" class="shell">name=VBird
name=${name}:good
export name;//将变量编程环境变量。
echo "$name is a good people"和
echo '$name is a good people'两者的结果是不同的。
env  显示当前的环境变量。
PS1='[\u@\h \w]$ ' 提示符变量

$表示当前Shell的PID
？上一个执行命令的回传码。

export可以将自定义变量，转成环境变量
<em>从键盘读入数据</em>
read -p '是否继续(Y=Yes,N=No)?'-t 2000 ret
declare -i sum=100+200
declere -x sum='sum' //设置为环境变量。
var[0]=陈
var[1]=思
echo ${var[0]}${var[1]}
alias lm='ls -l |more' //设置命令的别名
<em>history可以显示以前执行过的命令</em>
!!可以执行前一个执行过的命令
!al 可以执行以al开头的命令
find / &gt;list_right 2&gt;list_wrong //或重定向到dev/null去

选取命令
cut
cut -d '分隔符' -f field
cut -c 字符范围
grep
grep 
grep 'main' /etc/rc.d/*
grep -niv 't[ae]st' regular_express.txt
-i 忽略大小写
-n 输出行号
-v 反向搜索

排序命令
sort
wc word count

uniq(类似distinct，将相同的行去掉)
last |cut -d ' ' -f 1 | uniq -c
</pre>
<p><strong>16 HashMap的实现算法</strong> <br /><br /><strong>17 Java Concurrency中几种锁的用法的方法.</strong> <br />ReetanLock <br />Sync <br />在 Java Concurrency in action那本书里面应该有写，但是没有时间去看。 <br />据说ConcurrencyHashMap和AbstractQueuedSynchronizer都是Douge Lee精彩的代码 <br /><strong>20 Antx的命令</strong> <br />antx -p RELEASE //将项目打包放到第二方库，在Project.xml里面规定了。 <br /><strong>21 TC交易，包括正向交易和退款交易的JBPM流程图。</strong> <br /><br /><strong>22 Hessian是怎么将异常能从服务端转到客户端的？</strong> <br /><br /><strong>25 用户中心为什么有StringID和LongID：</strong> <br />String型的id是根据NickHash出来的。 <br />long型的id是数据库的seq。&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/203246#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sat, 14 Jun 2008 15:41:32 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/203246</link>
        <guid>http://chensimiaojava.javaeye.com/blog/203246</guid>
      </item>
      <item>
        <title>Ebay的可伸缩性架构</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/201562" style="color:red;">http://chensimiaojava.javaeye.com/blog/201562</a>&nbsp;
          发表时间: 2008年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: red">1 Maven的原理和API</span><br /><br />2 毕玄推荐的两本书。<br /><ul><li>计算机程序的构造和解释（原书第2版）</li><li>深入理解计算机系统（修订版）</li></ul> <br /><a href="http://www.infoq.com/articles/ebay-scalability-best-practices" target="_blank">3 EBay的可伸缩系架构。</a><ol><li>按功能拆分。</li><li>水平拆分，比如数据库分表，应用服务器不保留状态。</li><li>避免分布式事务。</li><li>尽量将同步转为异步。</li><li>虚拟化所有层，比如虚拟化DAO层，让DAO对上层完全透明。</li><li>尽量使用Cache</li></ol><br />将系统按功能拆分，<br />在代码那一级，拆分的层次细致到JAR，Package，Bundles<br />在应用服务器那一级，将16000台应用服务器分成220个应用集群，每个集群可以单独扩展，有点类似我们的用户中心，交易中心。<br />在应用那层不要保留Trasaction状态，那么应用服务器就可以水平扩展了。<br />尽量将功能按异步解耦，比如将消息调用放到异步JMS中，这样两者就解耦了。<br />Load-balancers and virtual IPs abstract network endpoints.
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/201562#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Mon, 09 Jun 2008 20:59:40 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/201562</link>
        <guid>http://chensimiaojava.javaeye.com/blog/201562</guid>
      </item>
      <item>
        <title>数据同步，容错机制</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/200708" style="color:red;">http://chensimiaojava.javaeye.com/blog/200708</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: #000000;"><strong>1 基本的Oracle DBA知识。</strong></span> </p>
<p>《Oracle DBA基础教程》有些地方有帮助。<br /><br /><strong>2 mysql中查看一个表的表结构:describe userbase;</strong> <br /><br /><strong>3 java.sql中,和Date对应的是Timestamp,</strong> <br /><br /><strong>4 Log4J的标准配置。</strong> <br />log4j.rootLogger=INFO, console,filelog <br />log4j.appender.console=org.apache.log4j.ConsoleAppender <br />log4j.appender.console.Threshold=DEBUG <br />log4j.appender.console.layout=org.apache.log4j.PatternLayout <br />log4j.appender.console.layout.ConversionPattern= %d %t %p [%c{4}] %m%n <br /><br />log4j.appender.filelog=org.apache.log4j.RollingFileAppender <br />log4j.appender.filelog.File=SyncMain.log <br />log4j.appender.filelog.MaxFileSize=20480KB <br />log4j.appender.filelog.MaxBackupIndex=5 <br />log4j.appender.filelog.layout=org.apache.log4j.PatternLayout <br />log4j.appender.filelog.layout.ConversionPattern=%d %t %p [%c{4}] %m%n <br /><br /><strong>5 Timer是一个后台线程来调度任务的，如果一个任务被wait了，那么这个线程不会返回，那么他就会永远等在那里。</strong> <br /><br /><strong>6 没有调用Connection.close的后果。</strong></p>
<p>没有关Connection导致应用挂死在等待连接上了。 连接池连接数据库如果出了问题，直接返回错误给应用就是了，最怕就是大家都睡在一个事件上，就麻烦了，New了几千个线程出来，最后把应用都崩掉了。这种事情代码里面需要保证能够failover。 <br /><strong><br />7 在Java领域中有很多可实现远程通讯的技术，例如：RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等 <br />见过代码的有MINA，ESB，Hessian， <br />其他只是听说过。</strong></p>
<p>&nbsp;</p>
<p><strong>8 网络IO，主要BIO,NIO,AIO,分别是什么意思？ <br /><br /><br />9 远程调用，</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 只给客户端提供一个接口，通过FactoryBean，提供给客户端的实际上是动态代理后的接口，请求通过远程调用发到服务端，然后再转回需要的格式。</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/200708#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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, 05 Jun 2008 22:25:30 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/200708</link>
        <guid>http://chensimiaojava.javaeye.com/blog/200708</guid>
      </item>
      <item>
        <title>用户中心603问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199896" style="color:red;">http://chensimiaojava.javaeye.com/blog/199896</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1 ESI是什么?</strong><br />ESI(Edge Side Include)对页面或者页面片断进行缓存。<br />TDBM是什么?<br />TBStore的升级,淘宝的分布式缓存<br /><br /><strong>2 Eclipse在Search View里</strong><br />查找下一个匹配项 Ctrl+.<br />查找上一个匹配项 Ctrl+,<br />查找匹配的括号   Ctrl+P<br />下一个方法       Ctrl+Shift+Down<br />上一个方法       Ctrl+Shift+Up<br />转到行首         Home<br />转到行尾         End<br /><br /><strong>3 写一个程序用MBeanExport自动注册到本地。</strong><br />MBeanExport可以将BeanFactory中的Bean，如果符合JMX的命名规范，可以自动注册到MBeanServer中去。<br /><pre name="code" class="java">MBeanExporter export = new MBeanExporter();
		export.setNamingStrategy(strategy);
		export.setAutodetectMode(MBeanExporter.AUTODETECT_MBEAN);</pre><br />		<br /><strong>4 JMX 监控地址</strong><br />10.1.6.154:1090<br /><br /><strong>6 修改更新时间的有效方法。</strong><br />只创建一个Calendar，然后直接设置System。currentTimeMillis<br />代码<br /><pre name="code" class="java">Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());</pre><br /><br />7 Tomcat的文档里面有类加载，动态代理，MBean，集群，Load Balance,连接器，监视器，日志等东西，Maven，<br />多花点时间研究下。<br /><br /><strong>8 ClassLoader</strong><br />BootupClassLoader/Extension ClassLoader负责加载JAVA_HOME中的核心类和扩展类。<br />System ClassLoader负责加载-classpath或-Djava.class.path中的类<br />自定义扩展类。<br />每个ClassLoader都维护了自己的命名空间，所以相同类路径的类可以被不同的ClassLoader中加载，典型的应用就是Webapp下面的各种应用。<br />Class.forname加载调用类的ClassLoader来加载。<br />而线程Content加载器实际是系统类加载器(AppClassLoader);<br />这篇文章对Bootup ClassLoader的原理写得比较清楚。<br /><a href="http://www.javaeye.com/topic/136427?page=1" target="_blank">http://www.javaeye.com/topic/136427?page=1</a><br /><br /><strong>10 一个问题。如果DBCP中的连接到Oracle，在Oracle发生下面的情况，连接处的状态？在下列情况下，只要应用没有Down，就能够Failover。</strong><br /><ul><li>12528: //TNS: 监听程序: 所有适用的例程都不允许建立新的连接 在正常工作的时候停止Oracle的Instance </li><li>1033: //ORACLE initialization or shutdown in progress 在正常工作的时候停止Oracle的Instance </li><li>3114: //not connected to ORACLE 线上数据库维护重启的时候出现的 </li><li>3113: //通信通道的文件结束 是Connection建立成功后，再次复用的时候Oracle机器的网络断掉 </li><li>12505: //TNS: 监听程序当前无法识别连接描述符中所给出的 SID 正常工作的时候，直接重启Oracle数据库的机器 </li><li>12547: //TNS: 丢失联系 正常工作的时候，直接重启Oracle数据库的机器 </li><li>12170: //TNS: 出现连接超时 正常工作的时候，直接重启Oracle数据库的机器或者指定IP或者主机名的机器连不通 </li><li>12152: //TNS: 无法发送中断消息 连接成功后，禁用本地网络后先出现这个错误，并且只出现了一次 </li><li>12541: //TNS: 没有监听程序 指定端口的Listener不存在 12560: //TNS: 协议适配器错误 禁用本地连接后，出现了12152后持续出现此错误 </li></ul>执行前，调用isClose可以知道当前连接是否有效。
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199896#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Tue, 03 Jun 2008 22:04:49 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199896</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199896</guid>
      </item>
      <item>
        <title>用户中心602问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199542" style="color:red;">http://chensimiaojava.javaeye.com/blog/199542</a>&nbsp;
          发表时间: 2008年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 写单元测试，模拟用户中心可能发生的各种情况，比如，数据库挂掉，用户中心挂掉，用户中心负载过高，数据库负载过高，请求热点等多种情况，调出最优方案。保证我们应用的FailBack。</strong> <br />在交易中心一定要完成这些单元测试程序，以完成对大并发量访问的性能测试。 <br />从DBA得到的数据，最大每秒有800~1000个事务，查询最大有3W到DB的查询。所以单元测试应该按这个的压力来进行。 <br /><br /><strong>2 自定义的Eclipse各种快捷键</strong></p>
<ul>
<li>运行最后一次的程序 F10 </li>
<li>Debug最后一次程序 Ctrl+F10 </li>
<li>运行当前文件的Main Alt+Shift+X,J </li>
<li>剪切一行 Ctrl+Shift+X </li>
<li>结束当前运行的程序 Alt+F4 </li>
<li>Package Explore Alt+1 </li>
<li>Console view Alt+2 </li>
<li>Search View Alt+3 </li>
<li>JUnit View Alt+5 </li>
<li>Navigator view Alt+6 </li>
<li>Properties&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Alt+7</li>
<li>扩大本次选择 Alt+Up </li>
<li>取消前一次选择 Alt+Down </li>
</ul>
<p><strong>3 MBeanServerFactoryBean是什么东西？如何建立一个MBeanServer。</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp; </strong>FactoryBean是个Bean工厂，由Spring的Bean来调用，向FactoryBean通过getObject来请求数据。 <br />建立一个MbeanSearver</p>
<pre name="code" class="java">MBeanServer mbs = ManagementFacotry.getPlatformMBeanServer();
ObjectName name = new ObjectName("MbeanTest:order=first");
ConfigurationMBean mBean = new Configuration();
mbs.registerMBean(mBean,name);</pre>
<p><br />或通过MBeanServerFactory来建立</p>
<pre name="code" class="java">MBeanServerFactory.createMBeanServer();</pre>
<p><br />在启动的Java参数里面加入，表示按MBeanServer启动。</p>
<pre name="code" class="java">-Dcom.sun.management.jmxremote.port=1090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false</pre>
<p><strong>4 MBeanExporter是什么东西？</strong> <br />MBeanExporter是Spring提供的一个方法类，Spring可以将任意的类暴露成Mbean，就是通过MBeanExporter来处理的。<br /><strong>5 com.sun.jdmk.comm.HtmlAdaptorServer？是什么东西</strong> <br />SUN提供的HTTP Server，将JMX Server导出成HTML格式，可以直接通过http://localhost:8080访问到MBean的信息。 <br /><br /><strong>6 MethodInvokingJobDetailFactoryBean是什么？</strong> <br />Spring提供简化Quartz访问的一个包装Bean，给该FactoryBean注入Object和定时任务到的时候需要执行的方法，就可以了。 <br />Spring配置</p>
<pre name="code" class="xml">&lt;bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"&gt;
  &lt;property name="targetObject" ref="exampleBusinessObject" /&gt;
  &lt;property name="targetMethod" value="doIt" /&gt;
&lt;/bean&gt;</pre>
<p><br />quartz任务定时执行指定Object的指定方法。 <br /><br /><strong>7 CronTriggerBean是什么东西？</strong> <br />cron:Linux下的计划任务。 cron的语法和Quartz的语法一样。<br /><br /><strong>8 Quartz机制</strong>。 <br />在创建任务安排的时候，HelloWorldJob没有被声明为Public，不能被Factory使用HelloWorldJob.class.newInstance创建新的Object，所以失败。 <br /><br />Quartz的典型任务代码：</p>
<pre name="code" class="java">//取得Schedule对象   
SchedulerFactory sf = new StdSchedulerFactory();   
Scheduler sch = sf.getScheduler();  
//构造JobDetail对象   
JobDetail jd = new JobDetail("HelloWorldJobDetail",Scheduler.DEFAULT_GROUP,HelloWorldJob.class);  //构造触发器对象   
Trigger tg = TriggerUtils.makeSecondlyTrigger(5);   
tg.setName("HelloWorldTrigger");   
sch.scheduleJob(jd, tg);   
//开始Scheduler   
sch.start();   </pre>
<p><br /><br /><strong>9 一个计划任务在执行的过程中如果遇到了严重错误，比如数据库维护导致不能连接数据库，任务调度机制如何能知道其执行失败并尝试重新执行，</strong> <br />Quartz可以完成对应的操作。 <br /><br /><strong>10 守护线程(deamon)，</strong> <br />只要有工作线程在运行，Java进程就不会退出运行，但是如果所有工作线程都结束了，那么守护线程也会跟着结束。 <br />可以使用Thread.setDeamon(true)，在创建一个线程的时候，来设置一个线程是守护线程。 <br /><br /><strong>11 Unix cron命令，CronTrigger的DOC里面有详细的解释。</strong> <br /><br /><strong>12 ObjectName是什么？</strong> <br />表示MBean的对象名，可以和一个或多个MBean关联，通常一个MBean对应一个ObjectName域的一个节点。 <br />ObjectName由键和键属性两部分组成。 <br />比如：</p>
<pre name="code" class="java">com.taobao.jmx.uic.thunder:type=uic,id=counterFilter 
</pre>
<p>&nbsp;<br /><strong>12 注入到IncMonitor的各个参数的意义。</strong> <br />notifyCenter。 <br />调用notifyCenter来将需要的信息发送到目标端。 <br />BeanFactoryUtils.beansOfTypeIncludingAncestors(this.context,TTMNotify.class) <br />将Spring中，有相同接口的所有实现类都得到，比如，通知类型，TTMNotify，实现类有Email通知，手机通知，旺旺通知，但是可能在配置文件里面只配置了需要的通知类型，所以，通过Helper方法将available的通知类型都得到。最后，遍历通知类型就是了。 <br /><br /><strong>13 关于MBeanServer连接。</strong> <br />mbeanServerConnectionCenter: <br />有可能一个Mbean Client连接到多个Server， <br />JMXConnector是什么? <br />JMXConnector是一个到JMX Server的连接，通过工厂方法JMXConnectorFactory.connect可以连接到指定的JMXServer上去。 <br /><br /><strong>14 MBeanServerConnection是什么？</strong> <br />使用代理，在本地执行的方法都会连接到远程，执行对应的方法，并返回，客户端就就像操作本地对象一样在服务端创建MBean，修改MBean的属性等。 <br /><br /><strong>15 JMXServiceURL是什么？</strong>service:jmx:rmi://localhost/jndi/rmi://10.1.6.154:1199/myconnector <br />一个到MBean Server的URL，有点类似于InetAddress。 <br />监控中心从JMX-Server中得到需要监控的对象，然后决定发Email还是发手机短消息。 </p>
<p><br /><span style="color: #ff0000;">PS： 关于Eclipse。 <br />Eclipse的工程依赖，类路径的管理方法。 <br />Eclipse的调试，怎么调试多线程的Eclipse程序。 <br />Eclipse3.4的新功能，将View dock在页面上。 <br />Eclipse快捷键编辑，When ____ 这个状态有什么区别。&nbsp;</span></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199542#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Mon, 02 Jun 2008 21:06:07 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199542</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199542</guid>
      </item>
      <item>
        <title>用户中心601问题-2</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199224" style="color:red;">http://chensimiaojava.javaeye.com/blog/199224</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 怎么把svn-base从Open Resource中除去。</strong> <br />将项目由subclipse导入到工程,就会自动忽略掉svn-base. <br /><br />2 <strong>Oracle的连接URL</strong>，jdbc:oracle:thin:@10.1.5.13:1521:dev-dbc <br /><strong>3 tnsname的配置</strong> <br />network\admin\tnsnames.ora</p>
<pre name="code" class="java">confluence =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.5.10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = dev-dbc)
    )
  )</pre>
<p><br /><br /><strong>4 标准的JDBC连接数据库。</strong></p>
<pre name="code" class="java">Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@10.1.5.13:1521:dev-dbc","xx","xx");
Statement stat = con.createStatement();
ResultSet r = stat.executeQuery("select * from bmw_users where rownum&lt;10");</pre>
<p><br /><br /><strong>5 thin连接和OCI连接的区别。</strong> <br />在本地配置好Thin连接。 <br /><br /><strong>6 ApplicationContext的意义，</strong> <br />因为ApplicatinContext继承了几个主要接口 <br />BeanFactory，Bean容器。 <br />ResourceLoader,可以按文件名加载Resource <br />ApplicationEventPublisher，可以发布事件。 <br />MessageSource，国际化解释Message。 <br /><br /><strong>7 知道DBCP配置的每个参数的意义以及实现原理，以及在我们的生产环境下可能会产生问题。</strong> <br />BasicDataSource是DBCP的基本类 <br />BasicDataSource里使用GenericPool来管理连接， <br />有5个参数是和Pool有关，对于大访问量连接的设置。一开始就创建足够多的连接，而连接也不超时。 <br />initialSize 12 <br />maxActive 12，在一开始就创建12个连接，永远都不会摧毁。 <br />maxIdle -1，表明当连接多余的时候，不会摧毁。 <br />minIdle 0，表明当连接不够的时候，不会新建。 <br />maxWait -1，表明如果请求超过了连接处理，该请求线程会被Wait在线程上。 <br /><br />8 <strong>Spring的配置文件</strong>，如果不是&lt;value&gt;标签中的元素，如果换行，会有很多的空格插入，在代码里面需要Trim将其去掉。 <br />所以从Spring配置文件来的参数，都记得要Trim一下。 <br /><br /><strong>9 将待处理的数据分页，一直到所有的数据都被处理完毕。</strong> <br />使用</p>
<pre name="code" class="java">{
  num++
}while(num&gt;=MAX_NUM)</pre>
<p>的方法。 <br /><br /><strong>10 一台数据库最多撑多少个连接，比如25台机器的用户中心，每台的连接配置到多少比较合适。</strong> <br />连接的请求数是DBA给出来的，DBA说来自你们应用的连接数只能是300个，那么，平均到30台机器上，每台机器就最多10个。&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199224#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 22:04:11 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199224</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199224</guid>
      </item>
      <item>
        <title>关注Google的几个技术</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199142" style="color:red;">http://chensimiaojava.javaeye.com/blog/199142</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>关注Google的技术，<br /><a href="http://research.google.com/pubs/papers.html#category4">http://research.google.com/pubs/papers.html#category4</a><br />Google论文--关于分布式和并行计算，<br />Google的几个核心技术，<br /><strong>1 集群设计和管理</strong><br /><strong>2 Google File System</strong><br /><strong>3 MapReduce(典型的并行计算工具)</strong><br />典型应用:<br />类似于grep的工作,日志分析,web-link的反向分析<br />Google网页的索引是建立在一系列的MapReduce工作上,前一个MR的输出是后一个MR的输入.<br />输入和输出都是中间临时文件</p>
<p><strong>4 Sawzall(用以并行计算的描述性语言)</strong><br />建立在MapReduce的基础上,可以认为是分布式的awt<br /><strong>5 BigTable(结构化的存储系统)</strong><br />一个Google自己做的数据库,建立在GFS，workqueue,MP的基础上<br />类似一个电子表格，但是是多维的，以时间为维度，为了保存变换。<br />被GoogleMap，Search History使用</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199142#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 14:05:55 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199142</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199142</guid>
      </item>
      <item>
        <title>Linux的常用命令学习</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199141" style="color:red;">http://chensimiaojava.javaeye.com/blog/199141</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1 vi的命令</strong><br /><em>在vi的一般模式下</em><br /><ul><li>0 相当于home</li><li>$ 相当于end</li><li>H 移动到本屏幕的第一行</li><li>L 移动到本屏幕最后一行</li><li>G 移动到文件的最后一行</li><li>gg 移动到文件的第一行</li><li>n+enter 向下移动n行</li></ul><em>一般模式：搜索与替换</em><br /><ul><li>/或? 输入搜索的文字</li><li>n 相当于F3</li><li>N 相当于Shift+F3</li><li>一般模式，删除，复制</li><span style="color: blue"><li>x 相当于del</li><li>X 相当于backword</span></li><li>dd 删除一行，相当于Eclipse的Ctrl+d</li><li>ndd 从光标位置开始，删除n行</li><li>yy 复制光标所在的那一行，相当于Ctrl+c</li><li>nyy 复制光标所在的n行，</li><li>p  粘贴，相当于Ctrl+v</li><li>u undo 相当于Ctrl+z</li><li>ctrl+r redo，相当于从ctrl+y</li><li>.  重复前一个动作</li><li>ZZ 在一般模式下，强制离开，并且写入</li></ul><br />2 Shell命令.<br /><ul><li>awt:(处理结构化文本)</li><li>grep:(general regular expression program),正则表达式处理工具</li><li>sed:流编辑器,可以使用正则表达式进行批量替换</li><li>sort:排序</li><li>tail -f:查看日志文件</li><li>uniq:去除重复行</li><li>wc:字符统计(word count)</li><li>More、Grep、Cat都类似于一种Map操作，而Sort、Uniq、wc等都相当于某种Reduce操作。</li><li><em>tar 压缩解缩命令</em></li><li>tar -cf target.tar 源文件</li><li>tar -xzf *.tar.gz</li></ul><br />3 SecuryCRT<br />sz filename, 使用Modom传输协议发送文件到客户端,Z的意思是ZMODEN,文件被放到了securyCRT的默认下载目录Download下面.
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199141#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 13:59:50 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199141</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199141</guid>
      </item>
      <item>
        <title>用户中心601问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199136" style="color:red;">http://chensimiaojava.javaeye.com/blog/199136</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1 关于线程同步</strong> </p>
<p>线程调用Sleep，主动放弃CPU，睡眠。 </p>
<p>线程同步等待需要同步资源，进入阻塞状态。 <br />一个线程调用wait，另外一个线程调用notify来唤醒该线程。 <br />工作线程太多，调度的时间超过了工作线程服务的时间，那么性能结果是会下降的。&nbsp;<br /><br /><strong>2 JVM级别的东西</strong> </p>
<p>char 2(unicode) <br />Object 4字节 <br />返回地址 4字节 <br />JVM碎片回收堆 new分配内存 　　 <br />JVM存储区 经常OutOfMemory，需要看为什么把JVM撑爆了 <br /><br /><strong>4 装载子系统将字节码装载到虚拟机</strong> <br />Class被装载到虚拟机，运行引擎负责运行这几部分 <br />方法区，堆，栈，PC，本地方法栈 <br />Java的栈有三个区域，局部变量区，运行环境区，操作数区。 <br />是否装载了HelloApp-》装载HelloApp成功-》链接-》初始化HelloApp-》调用方法。 <br /><br /><strong>5 JMX是Java management extension,目的是能远程的调用API管理Java应用服务器。在JMX管理下的模块叫MBean，可以通过Java Bean来管理。</strong>&nbsp;<br /><br /><strong>6 JBPM</strong> <br /><em>节点</em> </p>
<p>任务节点(TaskNode) <br />判断节点 (DecisionNode)<br />普通节点 (Node)<br /><em>事件</em> </p>
<p>node-enter <br />node-leave <br />可以在事件上注入ActionHandler，来执行特定的方法。 <br /><em>回调接口</em> </p>
<p>ActionHandler <br />DecisionHandler <br />AssignmentHandler <br />流程文件是被放在processdefinition.xml中的，但是需要把节点信息放到数据库中， <br />放到数据库的过程叫Deployment <br /><br /><strong>8 用户设计了一个流程，然后部署到Jboss中去</strong> <br />流程定义：XML中定义的流程 <br />Actor：参与者，流程中的相关人员。 <br />流程实例：参与者实际产生的一个流程，叫流程实例 <br />任务：每个流程中的环节叫任务Task </p>
<p>任务实例： <br />流转：Trasision，从一个任务到例外一个任务的转化过程叫流转。 <br />活动：Action，在流转中，由程序发起预先设定的活动，叫Action。 <br />应该考虑到流程升级，变化，系统应该怎么做。</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199136#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 13:40:06 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199136</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199136</guid>
      </item>
      <item>
        <title>200806的Todos</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199133" style="color:red;">http://chensimiaojava.javaeye.com/blog/199133</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: #ff0000;">1 分析我们的应用中和ClassLoader有关的应用</span>&nbsp;</p>
<p><span style="color: #ff0000;">2 分析JBoss Remoting的实现基础和技术细节，看有没有办法进行优化。</span> <br /><span style="color: #000000;">3 关于公司的Archtecture。</span> <br /><span style="color: #ff0000;">4 nio包的一些用法。</span> <br /><span style="color: #ff0000;">5 JBoss和MicroKenrel的架构和实现的技术细节。</span>&nbsp;<br /><span style="color: #003300;">6 慢慢的熟悉Linux的常用配置命令，尽量多的使用Linux的工具来分析。</span> <br /><span style="color: #ff0000;">7 需要对这些关键字敏感：性能，伸缩性，可靠性，failover, 自动管理，并行计算。&nbsp;</span>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199133#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 13:26:07 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199133</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199133</guid>
      </item>
      <item>
        <title>用户中心531问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199132" style="color:red;">http://chensimiaojava.javaeye.com/blog/199132</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1 定时器Timer，TimerTask，Timer的内部实现机制，怎么用后台线程来实现定时器，有时间可以去了解一下。</strong><br /><br /><strong>2 将一个Linux sh程序变成Linux服务，能在服务器重启后仍然能够运行。</strong>etc/rc.d/rc.local 将一个linux任务变成服务，开机就运行。<br /><br />3 Java Main是一个进程。<br />Main主线程退出，Java的子线程不会退出。一直会等到线程结束才会退出。所有工作线程的退出会导致主线程的退出,Deamon线程即使存在也会进程退出.<br /><br /><span style="color: red">4 有时间看下TreeSet的算法和具体实现机制。</span><br /><br /><span style="color: red">5 ClassPathXmlApplicationContext，</span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199132#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 13:19:20 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199132</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199132</guid>
      </item>
      <item>
        <title>用户中心528问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199131" style="color:red;">http://chensimiaojava.javaeye.com/blog/199131</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>1 能够从UIC中学习什么。</strong><br />怎么按功能在Eclipse里面把Project分成SubProject。<br /><span style="color: red">怎么单元测试<br />如何动态代理的实现。<br />如何拦截客户端请求，让远程调用对客户端透明。</span><br /><br /><strong>2 Eclipse里面能否给Console加上快捷键，让Eclipse向IDEA那么好用。</strong><br />不能！<br /><br /><strong>3 Spring中注入List。</strong><br />&lt;property name="serversString"><br />&lt;list><br />&lt;value>10.1.6.152:1234&lt;/value>		<br />&lt;/list><br />&lt;/property><br /><br /><strong>4 classLoad<br />Thread.currentThread().getContextClassLoader();<br />和Class.getClassLoad有什么区别</strong><br />bootstrap class loader <br /><br /><strong>5 RemoteAccessor是什么意思?</strong><br />Spring远程调用Bean，serviceInterface可以调用。<br /><br /><strong>6 FactoryBean是什么意思？</strong><br />FactoryBean，自己就是自己的Bean工厂，Spring知道一个Bean的类型是FactoryBean，他会调用getObject来获得这个Bean实例,可以把这个FactoryBean注入到需要Bean的任何地方去，而不用类型绑定。<br /><br /><strong>8 BeanClassLoaderAware是什么意思？</strong><br />实现了这个接口，Spring在Load进这个Class的时候，要把当前的ClassLoader注入到Bean中去。<br /><br />9 为什么注入RemoteAccessor的serviceInterface不是一个Class，而是一个String，这是怎么注入的?<br />在Set方法的时候，使用<br />Class.forName("serviceInterface")，将这个Interface的Class找到。<br /><br /><strong>10 ProxyFactory,Spring事务管理中的一段代码。</strong><br /><pre name="code" class="java">ProxyFactory proxyFactory = new ProxyFactory(); 
proxyFactory.addAdvisor
proxyFactory.setTargetSource(targetSource);   
proxyFactory.setInterfaces(this.proxyInterfaces)</pre><br />TargetSource，是反射的主Object，在TargetSource上面调用invock<br /><br /><strong>11 构造函数顺序，</strong><br />子类在构造的时候，会构造最上面的父类，父类的子类，然后调用自己的构造函数。调用super()这样的方法必须放到构造函数的第一行,所以构造函数的顺序一定是最早父类,子类,子类的子类.<br /><br /><strong>12 MethodInvocation是什么意思？</strong><br />AOP中，包括了反射调用的所有信息，包括targetObject,method,parameter.<br /><br /><strong>13 是否只能根据接口返回一个代理对象？能不能根据类返回一个代理对象？</strong><br />只能根据接口返回动态对象，但是CGLib可以实现目标类的子类，也就是可以根据实现类来做。<br /><br /><strong>11 InvocationTargetException是什么意思。</strong><br />这个异常是值被invoke的类在执行underlying方法的时候，下面的方法传上来的异常。但是业务异常会被包装到异常战中。<br /><br /><strong>14 Assert是什么意思？</strong><br />Spring中包含的一个Helper类,包含大量的静态方法.如果Assert没有通过，会抛出Error。<br /><br /><strong>15 Object create(Class api ,ServiceDomain serviceDomain )</strong><br />根据接口返回一个代理对象。<br />16 InvocationHandler是什么意思？<br />Proxy类和InvocationHandler类是Java反射的两个基础类。<br />19 写代码的每一步都必须考虑有可能的出错，并且将出错的记录下来。<br />20 AtomicInteger是什么意思？<br />AtomicInteger的每一个单个的方法比如AddAndGet，都是线程安全的,也就是他的每一个方法都是设置了synchronized的.<br /><br />21 Lock，ReentrantLock的实现。<br />重入锁,和synchronized的关键字意义差不多,只是用锁的机制可以显示的控制.<br /><br />22 RuntimeIOException 异常<br />23 IoServiceConfig是什么？<br />24 SocketConnectorConfig<br />25 config.setThreadModel是什么意思？<br />26 ((SocketConnectorConfig)config).getSessionConfig().setTcpNoDelay(true);是什么意思<br />Mina的客户端编程。<br /><br />objectserialize<br />ProtocolCodecFilter<br />ObjectSerializationCodecFactory是什么意思？<br />ioConnector = new SocketConnector(processorCount, Executors.newCachedThreadPool());<br />SocketConnector为什么还需要加线程池？<br />ConnectFuture是什么意思？<br /><br />27 ConcurrentHashMap<br />28 SocketTimeoutException<br />29 AtomicLong是什么意思？<br />30 BlockingQueue Queue LinkedBlockingQueue。<br /><br />31 有时间的话，看看CGLib的低层实现机制。<br /><br />32 2008-05-30 13:20:04,509 main [core.entity.jdbc.DatabaseUtil] Entity "SearchRequest" has no table in the database<br />的机制是什么？<br /><br /><strong>32 读DBCP源代码，了解其池机制的实现。</strong><br />DBCP使用的apache common pool来实现线程池的管理,GenericObjectPool来实现池的策略,DBPC负责在请求连接的时候,从GenericPool中BorrowObject,连接Destroy的时候,将连接returnObject回连接池,在returnObject的方法中,会调用notifyAll,将等待连接的所有线程唤醒,让等待的线程继续去抢剩下的线程,同时,如果当前线程中的连接数大于了MaxIdle(不知道为什么大于?),线程池会释放掉多于的连接,这个策略可能会产生危险,在下面的情况下.可能会陷入多米诺效应:在某个时间,数据库Standby切换,大概需要10分钟,在这10分钟,可能有段时间,数据库ip消失,所有的连接在不停的重连数据库,这个时候,如果策略新建连接,新建的连接不会返回,会有一大堆的线程在外面等着连接的到来,但是就是得不到连接.<br /><br /><strong>33 jboss_init_redhat.sh，了解怎么把一个linux的程序注册为服务，机器一启动就运行</strong><br />修改文件/etc/rc.d/rc.local,将要启动的shell脚本放到这个文件里面，可以实现开机就启动。<br /><br /><strong>34 JBoss bin目录下提供的东西。<br />wsconsume.bat<br />wsprovide.bat<br />wsrunclient.bat<br />wstools.bat</strong><br /><br /><strong>35 JBoss架构的架构图：<br />是由JMX MBean服务器、微内核、一套可插入式组件服务以及MBean构成的。<br />JBoss如何基于JMX Mbean的？</strong><br /><br /><span style="color: red">36 Jboss的热部署和实现原理</span>
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199131#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 13:15:38 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199131</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199131</guid>
      </item>
      <item>
        <title>用户中心526问题</title>
        <author>泡 泡</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chensimiaojava.javaeye.com">泡 泡</a>&nbsp;
          链接：<a href="http://chensimiaojava.javaeye.com/blog/199130" style="color:red;">http://chensimiaojava.javaeye.com/blog/199130</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>14 Runtime.getRuntime().addShutdownHook(shutdownHook);是什么意思<br />1 Runtime.getRuntime().removeShutdownHook是什么意思</strong><br />从Runtime中可以得到当前的运行环境，包括CPU数目，当前空闲内存等，也可以给ShutDown的过程中增加回调函数。<br /><br /><strong>2 Runtime.getRuntime().availableProcessors() 是什么意思</strong><br />问题：得到当前是几核的CPU，为什么要+1<br /><br /><strong>3 Executors.newCachedThreadPool是什么意思ExcutorService的用法和性能</strong><br />Address already in use: connect<br />connet refuse:connect 是什么意思。<br />Java的Concurrent包和Thread包<br />需要了解这个系统的每一个细节，包括请求来到，怎么分发，怎么多线程，怎么同步，而不仅仅是怎么把参数写出来。<br /><br /><strong>4 JMX</strong><br />MBeanServer是个什么东西<br />ManagementFactory是个什么东西<br />ObjectName是个什么东西。<br /><br />在启动Java的时候，使用参数：-Dcom.sun.management.jmxremote.port=1090<br />来启动jmxremote服务<br />不通过JConsole，直接通过程序访问MBeanServer<br />JMXServiceURL <br />JMXConnector c = JMXConnectorFactory.connect(u); <br />如果有时间，可以去看JMX Specification去研究JMX的内部实现机制。<br />怎么将当前Java线程等待<br /><br /><strong>5 为什么用ShutDownHook这样的方法来调用Stop。</strong><br /><br /><strong>5 IoAcceptor是个什么东西<br />6 IoServiceManager是个什么东西<br />10 IoHandlerAdapter是个什么东西<br />11 IoServiceConfig是个什么东西<br />12 DefaultIoFilterChainBuilder是个什么东西<br />13 InetSocketAddress是个什么东西。<br />IoConnector<br />IoSession<br />IoHandler<br />IoFilter<br /></strong><br />使用Mina的API，<br />IoAceptor相当于Socket的Listener，让Mina在一个端口上wait，并且指定一个HandlerAdaptor和请求池的策略。<br />IoServiceConfig是服务策略。<br />DefualtIoFilterChainBuilder是Mina中用来管理FilterChain的工具类。<br />InetSocketAddress是Java.net包中的类，封装了Ip和端口，是对一个Socket地址的封装。网络编程中最基础的东西。<br />IoConnection是客户用来连Mina的IoSocket的类。<br />IoSession代表了一次客户端和服务端的对话。<br />IoHandler是NIO的回调接口。<br />IoFilter是FilterChain的实现接口，常见的有将Java类串行化的Filter，编码的Filter。<br /><br /><strong>6 Mina是什么？</strong>Mina是一个抽象，事件驱动，异步的TCP，UDP框架，建立在NIO基础上。<br />和Sevlet相似的FilterChain机制，使用Filter机制可以将业务逻辑和协议完全分开。<br />使用直接流或直接用户定义的Object或编码。<br />高度定制的线程模型，比如单线程，线程池，超过一个的线程池<br />Overload shielding & traffic throttling （过载保护和流量截留）<br />JMX管理<br />流式IO支持<br />与Spring的集成<br /><br />IoConnector是客户端的连接器。<br />IoAcceptor是服务端的端口监听器。<br /><strong>7 Java的内存分配有两种，DirectMemory和Heap Memory。</strong><br />Java的内存分配策略。<br /><br /><strong>11 我想从Mina中得到什么？</strong><br />了解<br />线程池的使用，<br />Java网络编程。<br />nio包的使用<br />并发的使用<br />学习他怎么来保证Session信息的传递。
          <br/><br/>
          <span style="color:red;">
            <a href="http://chensimiaojava.javaeye.com/blog/199130#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</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>Sun, 01 Jun 2008 13:02:41 +0800</pubDate>
        <link>http://chensimiaojava.javaeye.com/blog/199130</link>
        <guid>http://chensimiaojava.javaeye.com/blog/199130</guid>
      </item>
  </channel>
</rss>