??xml version="1.0" encoding="utf-8" standalone="yes"?>佐山爱痴汉视频一区二区三区,麻豆精品蜜桃,日韩欧美电影在线观看http://www.aygfsteel.com/diggbag/zh-cnThu, 19 Jun 2025 15:35:17 GMTThu, 19 Jun 2025 15:35:17 GMT60用jstack跟踪cpu占用率的javaU程http://www.aygfsteel.com/diggbag/articles/jstack.html哲同哲同Wed, 01 Aug 2012 09:22:00 GMThttp://www.aygfsteel.com/diggbag/articles/jstack.htmlhttp://www.aygfsteel.com/diggbag/comments/384536.htmlhttp://www.aygfsteel.com/diggbag/articles/jstack.html#Feedback0http://www.aygfsteel.com/diggbag/comments/commentRss/384536.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/384536.html以下Ҏ在centOS下执行通过Q?br />1.先定位占用cpu高的q程

top

2.使用以下命o

ps p 14766 -L -o pcpu,pid,tid,time,tname,stat,psr | sort -n -k1 -r

其中14766是刚?中cpu占用率高的进Epid

3.2.4 32525 32537 01:58:41 ?        Sl     6
0.8 32525  1771 00:43:12 ?        Sl     0
0.8 32525  1769 00:39:46 ?        Sl     0
0.7 32525 12324 00:33:36 ?        Sl     0
0.5 32525  1772 00:27:50 ?        Sl     0
0.5 32525  1768 00:25:45 ?        Sl     0
0.4 32525 30760 00:19:13 ?        Sl     0
0.4 32525  1773 00:22:36 ?        Sl     0
0.4 32525  1770 00:20:25 ?        Sl     0
0.3 32525 32385 00:00:10 ?        Sl     0
0.1 32525 31668 00:00:03 ?        Sl     0
0.1 32525 31667 00:00:03 ?        Sl     0
0.1 32525  1790 00:07:10 ?        Sl     1

 

其中W?个结果就是此q程中有问题的线Enid

4.通过jstack命odump出堆?/span>

"AppController_ThreadPool_L2_Pool Thread" daemon prio=10 tid=0x0000000051c2b000 nid=0x7bb3 in Object.wait() [0x000000005e3c5000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.company.threadpool.ThreadPoolImpl$PoolThread.run(ThreadPoolImpl.java:142)
        - locked <0x00002aaca30341a8> (a org.company.threadpool.ThreadPoolImpl$PoolThread)

其中的nid是U程的编码,只不q是l过?6q制的{换?/span>

卛_q制?1776对应的十六进?0x7bb3Q定位到U程后一切好办?/span> 



哲同 2012-08-01 17:22 发表评论
]]>
关于在JAXB中用泛型的问题http://www.aygfsteel.com/diggbag/articles/JAXB.html哲同哲同Thu, 12 Jul 2012 11:04:00 GMThttp://www.aygfsteel.com/diggbag/articles/JAXB.htmlhttp://www.aygfsteel.com/diggbag/comments/382913.htmlhttp://www.aygfsteel.com/diggbag/articles/JAXB.html#Feedback0http://www.aygfsteel.com/diggbag/comments/commentRss/382913.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/382913.html1.在用jaxbMarshaller生成xml的过E中Q有java bean如下使用C泛型Q?/p>

@XmlRootElement(name = "ReturnInfo")
@XmlType()
public class ReturnInfo<T> {

private List<T> resultList;

 public List<T> getResultList() {

  return resultList;
 }

 public void setResultList(List<T> resultList) {

  this.resultList = resultList;
 }

}

2.在最初测试的时候jaxbMarshaller报异常,无法扑ֈ处理泛型的办法?/p>

3.在用jaxb旉要在java bean打上@XmlSeeAlso(MultiQueryInfo.class)注释Q作用就是是在jaxbl定一个class时候可以?/p>

其他的classQ在jaxb使用多态的时候都需要用到此标签Q其中括号中可以d多个class,如@XmlSeeAlso(A.class,B.class)

4.在客L的bean中也需要用到此注释Q否则同h转换错误Q?/p>

Exception in thread "main" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to com.jd.fms.adsettlement.client.domain.MultiQueryInfo



哲同 2012-07-12 19:04 发表评论
]]>
解决m2eclipse插g引v的pom.xml校验错误http://www.aygfsteel.com/diggbag/articles/375156.html哲同哲同Wed, 18 Apr 2012 10:19:00 GMThttp://www.aygfsteel.com/diggbag/articles/375156.htmlhttp://www.aygfsteel.com/diggbag/comments/375156.htmlhttp://www.aygfsteel.com/diggbag/articles/375156.html#Feedback1http://www.aygfsteel.com/diggbag/comments/commentRss/375156.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/375156.html1.pom.xml文g报Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-resources-plugin:2.2:resources (execution: default-resources, phase: process-resources) pom.xml /testMaven-common line 3 Maven Project Build Lifecycle Mapping Problem

2.D此错误是m2eclipse插g0.12及之前的版本在Eclipse 内执行了一pd的生命周期引起冲H导致的Q如果你的maven报此c错误,而又用到了maven-resources-pluginq个插gQ那么请按你的项目pom.xml中加?/p>

<plugin>
      <groupId>org.eclipse.m2e</groupId>
      <artifactId>lifecycle-mapping</artifactId>
      <version>1.0.0</version>
      <configuration>
        <lifecycleMappingMetadata>
          <pluginExecutions>
            <pluginExecution>
              <pluginExecutionFilter>
                <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-resources-plugin</artifactId>
                <versionRange>[1.2,)</versionRange>
                <goals>
                <goal>resources</goal>
                 <goal>testResources</goal>
                </goals>
              </pluginExecutionFilter>
              <action>
                <ignore />
              </action>
            </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </configuration>
    </plugin>

解决冲突Q具体原因参?a >http://wiki.eclipse.org/M2E_plugin_execution_not_covered


 



哲同 2012-04-18 18:19 发表评论
]]>
为Javad动态语a能力Q通过spring配置使用groovyhttp://www.aygfsteel.com/diggbag/articles/373730.html哲同哲同Tue, 10 Apr 2012 09:55:00 GMThttp://www.aygfsteel.com/diggbag/articles/373730.htmlhttp://www.aygfsteel.com/diggbag/comments/373730.htmlhttp://www.aygfsteel.com/diggbag/articles/373730.html#Feedback0http://www.aygfsteel.com/diggbag/comments/commentRss/373730.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/373730.html1.使用背景Q项目中想用规则引擎,调研后发现流行的开源规则引擎都比较重量U,考虑到项目只需要通过配置文g讑֮规则集,故用java动态用groovy卛_辑ֈ目的Q?br />

2.通过以下方式配置spring使用groovyQ和采用java~程没有太大区别Qgroovy提供较^的从javaq来的学习曲U,下面的例子中的groovycL生生是一个javac,只不q是写在xml文g中的javacȝŞ了;

3.spring通过org.springframework.scripting.groovy.GroovyScriptFactorycd生成groovyc,׃使用到jdk的动态代理,所以所有用groovy定义的类必须实现java定义的接口,q是可以q行的关键;

4.配置spring.xml

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:lang="http://www.springframework.org/schema/lang"
 xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/lang
        http://www.springframework.org/schema/lang/spring-lang-2.5.xsd
  "
 default-autowire="byName">

此文件头必不可少Q否则无法识别lang标签Q?/p>

<lang:groovy id="groovyHello" >
  <lang:inline-script>
        <![CDATA[
        package com.jd.fms;
            import com.jd.fms.netty.GroovyHelloWorld;
            public class TestGroovyHelloWorld implements GroovyHelloWorld{
    public void doit(){
    System.out.println("hello world");
    }
   }
        ]]>
    </lang:inline-script>
 </lang:groovy>

采用lang:groovy定义groovy片段Q当然也可以采用

<lang:groovy id=" script-source="....">的方式引入文件?/pre>
不要忘记的是在工E中定义GroovyHelloWorld的接口,该接口需要实C个doitҎ?/pre>
5.目中直接通过
@Autowired
 GroovyHelloWorld groovyHelloWorld;
调用卛_Q?/pre>
6.groovy为java提供了很好的动态语a能力Q如果项目没有必要用太重量U的规则引擎Q?/pre>
那么使用动态语a让业务h员直接配|也不失Z个好Ҏ?/pre>

 



哲同 2012-04-10 17:55 发表评论
]]>关于mybatis的batch模式性能试及结?/title><link>http://www.aygfsteel.com/diggbag/articles/mybatis.html</link><dc:creator>哲同</dc:creator><author>哲同</author><pubDate>Thu, 16 Feb 2012 09:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/diggbag/articles/mybatis.html</guid><wfw:comment>http://www.aygfsteel.com/diggbag/comments/370130.html</wfw:comment><comments>http://www.aygfsteel.com/diggbag/articles/mybatis.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/diggbag/comments/commentRss/370130.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/diggbag/services/trackbacks/370130.html</trackback:ping><description><![CDATA[<div style="text-indent: 2em">q日在公叔R目中Q用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究Q得Z下结论:<br /><br />     1.Mybatis内置的ExecutorType?U,默认的是simpleQ该模式下它为每个语句的执行创徏一个新的预处理语句Q单条提交sqlQ而batch模式重复使用已经预处理的语句Q?/div> <div style="text-indent: 2em">q且扚w执行所有更新语句,昄batch性能更优;</div> <div style="text-indent: 2em"> </div> <div style="text-indent: 2em">2.?font style="background-color: #fbfbfb">batch模式也有自己的问题,比如在Insert操作Ӟ在事务没有提交之前,是没有办法获取到自增的idQ这在某型情形下是不W合业务要求的;</font></div> <div style="text-indent: 2em"><font style="background-color: #fbfbfb"></font> </div> <div style="text-indent: 2em"><font style="background-color: #fbfbfb">3.</font> 在测试中使用simple模式提交10000条数据,旉?8248 毫秒Qbatch模式?023 Q性能提高70%Q?/div> <div style="text-indent: 2em"> </div> <div style="text-indent: 2em">4.通过走码和研读spring相关文g发现Q?font color="#ff0000">在同一事务中batch模式和simple模式之间无法转换</font>Q由于本目一开始选择了simple模式Q所以碰到需要批量更新时Q只能在单独的事务中q行Q?/div> <div style="text-indent: 2em"> </div> <div style="text-indent: 2em">5.在代码中使用batch模式可以使用以下方式Q?/div> <div style="text-indent: 2em"> </div> <div style="text-indent: 2em">//从spring注入原有的sqlSessionTemplate</div> <div style="text-indent: 2em"> <div>@Autowired</div> <div>private SqlSessionTemplate sqlSessionTemplate;</div> <div> </div> <div> <div>public void testInsertBatchByTrue() {</div> <div> </div> <div>//新获取一个模式ؓ<font color="#ff0000">BATCHQ?/font>自动提交为false的session</div> <div><font color="#ff0000">//<font color="#000000">如果自动提交讄?/font>true</font><font color="#000000">,无法控制提交的条数Q改为最后统一提交Q可能导致内存溢?/font></div> <div style="text-indent: 4em">SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(</div> <blockquote style="margin-right: 0px" dir="ltr"> <div><font color="#ff0000">ExecutorType.BATCH, false</font>);</div></blockquote> <div>//通过新的session获取mapper</div> <div>    fooMapper = session.getMapper(FooMapper.class);</div> <div></div> <div>    int size = 10000;</div> <div>    try {</div> <div>        for (int i = 0; i < size; i++) {</div> <div>                Foo foo = new Foo();</div> <div>                foo.setName(String.valueOf(System.currentTimeMillis()));</div> <div>                fooMapper.insert(foo);</div> <div>                    if (i % 1000 == 0 || i == size - 1) {</div> <div>                    //手动?000个一提交Q提交后无法回滚</div> <blockquote style="margin-right: 0px" dir="ltr"> <blockquote style="margin-right: 0px" dir="ltr"> <div style="text-indent: 8em"><font color="#ff0000">session.commit();</font></div></blockquote></blockquote> <div>                    //清理~存Q防止溢?/div> <div>                            session.clearCache();</div> <div>        }</div> <div>        }</div> <div>    } catch (Exception e) {</div> <blockquote style="margin-right: 0px" dir="ltr"> <blockquote style="margin-right: 0px" dir="ltr"> <div style="text-indent: 4em"><font color="#ff0000">//没有提交的数据可以回?/font></div></blockquote></blockquote> <div>                        session.rollback();</div> <div>            } finally {</div> <blockquote style="margin-right: 0px" dir="ltr"> <blockquote style="margin-right: 0px" dir="ltr"> <div style="text-indent: 8em"><font color="#ff0000">session.close();</font></div></blockquote></blockquote> <div>        }</div> <div>    }</div> <div> </div> <div>6.上述代码没有使用spring的事务,改动手动控制Q?font color="#ff0000">如果和原spring事务一起用,无法回滚,</font>必须注意Q最好单独用;<br /><br /></div></div></div><img src ="http://www.aygfsteel.com/diggbag/aggbug/370130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/diggbag/" target="_blank">哲同</a> 2012-02-16 17:40 <a href="http://www.aygfsteel.com/diggbag/articles/mybatis.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用spring AOP后注入失败的解决Ҏhttp://www.aygfsteel.com/diggbag/articles/369228.html哲同哲同Thu, 02 Feb 2012 04:14:00 GMThttp://www.aygfsteel.com/diggbag/articles/369228.htmlhttp://www.aygfsteel.com/diggbag/comments/369228.htmlhttp://www.aygfsteel.com/diggbag/articles/369228.html#Feedback2http://www.aygfsteel.com/diggbag/comments/commentRss/369228.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/369228.html目框架是struts2+springQ在未用AOP机制前,在action层注入的service是没有问题的Q但是当试在action层用AOP机制拦截相关异常Ӟ会出现注入失败的问题Q出现空指针异常?br />
问题分析Q原因是一般struts2+spring应用中,spring的插件只负责为action的ioc部分Q但q没有进行功能加强,即采用代理的机制Q所有的actionq是使用struts2q行理Q?br />在用AOP后,q些action需要由springq行理Q如果没有由springq行代理Q将出现注入p|?br />
解决办法Q在每个action前加上@Component("loginAction") @Scope("prototype")Q在struts的配|中使用loginAction的名字进行配|,@Scope用于声明action使用多实例,q样AOP可以q行正常注入



哲同 2012-02-02 12:14 发表评论
]]>
使用apache cxf 发布RESTful webservicehttp://www.aygfsteel.com/diggbag/articles/361912.html哲同哲同Mon, 24 Oct 2011 09:27:00 GMThttp://www.aygfsteel.com/diggbag/articles/361912.htmlhttp://www.aygfsteel.com/diggbag/comments/361912.htmlhttp://www.aygfsteel.com/diggbag/articles/361912.html#Feedback0http://www.aygfsteel.com/diggbag/comments/commentRss/361912.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/361912.html阅读全文

哲同 2011-10-24 17:27 发表评论
]]>
RESTful webservice ?SOAP webserivce Ҏ及区?/title><link>http://www.aygfsteel.com/diggbag/articles/361703.html</link><dc:creator>哲同</dc:creator><author>哲同</author><pubDate>Fri, 21 Oct 2011 03:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/diggbag/articles/361703.html</guid><wfw:comment>http://www.aygfsteel.com/diggbag/comments/361703.html</wfw:comment><comments>http://www.aygfsteel.com/diggbag/articles/361703.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/diggbag/comments/commentRss/361703.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/diggbag/services/trackbacks/361703.html</trackback:ping><description><![CDATA[<p><a name="6.1.接口抽象|outline"><span id="wmqeeuq" class="smalltitle">接口抽象</span></a></p> <p>RESTful Web 服务使用标准?HTTP Ҏ (GET/PUT/POST/DELETE) 来抽象所?Web pȝ的服务能力,而不同的是,SOAP 应用都通过定义自己个性化的接口方法来抽象 Web 服务Q这更像我们l常谈到?RPC。例如本例中?getUserList ?getUserByName Ҏ?/p> <p>RESTful Web 服务使用标准?HTTP Ҏ优势Q从大的斚w来讲Q标准化?HTTP 操作ҎQ结合其他的标准化技术,?URIQHTMLQXML {,会极大提高pȝ与系l之间整合的互操作能力。尤其在 Web 应用领域QRESTful Web 服务所表达的这U抽象能力更加脓q?Web 本n的工作方式,也更加自然?/p> <p>同时Q用标?HTTP Ҏ实现?RRESTful Web 服务也带来了 HTTP Ҏ本n的一些优势:</p> <ul><li><strong><em>无状态性(StatelessQ?/em> </strong></li></ul> <p>HTTP 协议从本质上说是一U无状态的协议Q客L发出?HTTP h之间可以怺隔离Q不存在怺的状态依赖。基?HTTP ?ROAQ以非常自然的方式来实现无状态服务请求处理逻辑。对于分布式的应用而言QQ意给定的两个服务h Request 1 ?Request 2, ׃它们之间q没有相互之间的状态依赖,׃需要对它们q行怺协作处理Q其l果是:Request 1 ?Request 2 可以在Q何的服务器上执行Q这L应用很容易在服务器端支持负蝲q (load-balance)?/p> <ul><li><strong><em>安全操作与幂指相{特性(Safety /IdempotenceQ?/em> </strong></li></ul> <p>HTTP ?GET、HEAD h本质上应该是安全的调用,卻IGET、HEAD 调用不会有Q何的副作用,不会造成服务器端状态的改变。对于服务器来说Q客LҎ一 URI ?n ơ的 GET、HAED 调用Q其状态与没有做调用是一LQ不会发生Q何的改变?/p> <p>HTTP ?PUT、DELTE 调用Q具有幂指相{特?, 卻I客户端对某一 URI ?n ơ的 PUT、DELTE 调用Q其效果与做一ơ的调用是一L。HTTP ?GET、HEAD Ҏ也具有幂指相{特性?/p> <p>HTTP q些标准Ҏ在原则上保证你的分布式系l具有这些特性,以帮助构建更加健壮的分布式系l?/p> <p><a name="6.2.安全控制|outline"><span id="wmqeeuq" class="smalltitle">安全控制</span></a></p> <p>Z说明问题Q基于上面的在线用户理pȝQ我们给定以下场景:</p> <p>参考一开始我们给出的用例图,对于客户?Client2Q我们只希望它能以只ȝ方式讉K User ?User List 资源Q?Client1 h讉K所有资源的所有权限?/p> <p>如何做这L安全控制Q?/p> <p>通行的做法是Q所有从客户?Client2 发出?HTTP h都经q代理服务器 (Proxy Server)。代理服务器制定安全{略Q所有经q该代理的访?User ?User List 资源的请求只hd权限Q即Q允?GET/HEAD 操作Q而像h写权限的 PUT/DELTE 是不被允许的?/p> <p>如果对于 RESTQ我们看看这L安全{略是如何部|的。如下图所C:</p><br /><a name="6.2.1.?4. REST 与代理服务器 (Proxy Servers)|outline"><strong>?4. REST 与代理服务器 (Proxy Servers)</strong></a><br /><img alt="REST" src="http://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/images/4.jpg" width="547" height="187" /> <br /> <p>一般代理服务器的实现根?(URI, HTTP Method) 两元l来军_ HTTP h的安全合法性?/p> <p>当发现类gQhttp://localhost:8182/v1/users/{username}QDELETEQ这LhӞ予以拒绝?/p> <p>对于 SOAPQ如果我们想借助于既有的代理服务器进行安全控Ӟ会比较尴,如下图:</p><br /><a name="6.2.2.?5. SOAP 与代理服务器 (Proxy Servers)|outline"><strong>?5. SOAP 与代理服务器 (Proxy Servers)</strong></a><br /><img alt="REST" src="http://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/images/5.jpg" width="569" height="206" /> <br /> <p>所有的 SOAP 消息l过代理服务器,只能看到Q?code>http://localhost:8182/v1/soap/servlet/messagerouter</code>, HTTP POSTQ这L信息Q如果代理服务器想知道当前的 HTTP h具体做的是什么,必须?SOAP 的消息体解码Q这L话,意味着要求W三方的代理服务器需要理解当前的 SOAP 消息语义Q而这U?SOAP 应用与代理服务器之间的紧耦合关系是不合理的?/p> <p><a name="6.3.关于~存|outline"><span id="wmqeeuq" class="smalltitle">关于~存</span></a></p> <p>众所周知Q对于基于网l的分布式应用,|络传输是一个媄响应用性能的重要因素。如何用缓存来节省|络传输带来的开销Q这是每一个构建分布式|络应用的开发h员必考虑的问题?/p> <p>HTTP 协议带条件的 HTTP GET h (Conditional GET) 被设计用来节省客L与服务器之间|络传输带来的开销Q这也给客户端实?Cache 机制 ( 包括在客L与服务器之间的Q何代?) 提供了可能。HTTP 协议通过 HTTP HEADER 域:If-Modified-Since/Last- ModifiedQIf-None-Match/ETag 实现带条件的 GET h?/p> <p>REST 的应用可以充分地挖掘 HTTP 协议对缓存支持的能力。当客户端第一ơ发?HTTP GET hl服务器获得内容后,该内容可能被~存服务?(Cache Server) ~存。当下一ơ客Lh同样的资源时Q缓存可以直接给出响应,而不需要请求远E的服务器获得。而这一切对客户端来说都是透明的?/p><br /><a name="6.3.1.?6. REST 与缓存服务器 (Cache Server)|outline"><strong>?6. REST 与缓存服务器 (Cache Server)</strong></a><br /><img alt="REST" src="http://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/images/6.jpg" width="530" height="204" /> <br /> <p>而对?SOAPQ情况又是怎样的呢Q?/p> <p>使用 HTTP 协议?SOAPQ由于其设计原则上ƈ不像 REST 那样?Web 的工作方式相一_所以,Z SOAP 应用很难充分发挥 HTTP 本n的缓存能力?/p><br /><a name="6.3.2.?7. SOAP 与缓存服务器 (Cache Server)|outline"><strong>?7. SOAP 与缓存服务器 (Cache Server)</strong></a><br /><img alt="REST" src="http://www.ibm.com/developerworks/cn/webservices/0907_rest_soap/images/7.jpg" width="569" height="115" /> <br /> <p>两个因素军_了基?SOAP 应用的缓存机制要q比 REST 复杂Q?/p> <p>其一、所有经q缓存服务器?SOAP 消息L HTTP POSTQ缓存服务器如果不解?SOAP 消息体,没法知道?HTTP h是否是想从服务器获得数据?/p> <p>其二、SOAP 消息所使用?URI L指向 SOAP 的服务器Q如本文例子中的 <code>http://localhost:8182/v1/soap/servlet/messagerouter</code>Q这q没有表辄实的资源 URIQ其l果是缓存服务器Ҏ不知道那个资源正在被hQ更不用谈进行缓存处理?/p> <p><a name="6.4.关于q接性|outline"><span id="wmqeeuq" class="smalltitle">关于q接?/span></a></p> <p>在一个纯?SOAP 应用中,URI 本质上除了用来指C?SOAP 服务器外Q本w没有Q何意义。与 REST 的不同的是,无法通过 URI 驱动 SOAP Ҏ调用。例如在我们的例子中Q当我们通过</p> <p>getUserList SOAP 消息获得所有的用户列表后,仍然无法通过既有的信息得到某个具体的用户信息。唯一的方法只有通过 WSDL 的指C,通过调用 getUserByName 获得QgetUserList ?getUserByName 是彼此孤立的?/p> <p>而对?RESTQ情冉|完全不同的:通过 <code>http://localhost:8182/v1/users</code> URI 获得用户列表Q然后再通过用户列表中所提供?LINK 属性,例如 <code><link>http://localhost:8182/v1/users/tester</link></code>获得 tester 用户的用户信息。这L工作方式Q非常类g你在览器的某个面上点L?hyperlink, 览器帮你自动定向到你想讉K的页面,q不依赖MW三方的信息?/p><br /><br /> <p><a name="7.ȝ|outline"><span id="wmqeeuq" class="atitle">ȝ</span></a></p> <p>典型的基?SOAP ?Web 服务以操作ؓ中心Q每个操作接?XML 文档作ؓ输入Q提?XML 文档作ؓ输出。在本质上讲Q它们是 RPC 风格的。而在遵@ REST 原则?ROA 应用中,服务是以资源Z心的Q对每个资源的操作都是标准化?HTTP Ҏ?/p> <p>本文主要集中在以上的几个斚wQ对 SOAP ?REST q行了对比,可以看到Q基?REST 构徏的系l其pȝ的扩展能力要Z SOAPQ这可以体现在它的统一接口抽象、代理服务器支持、缓存服务器支持{诸多方面。ƈ且,伴随着 Web Site as Web Services 演进的趋势,Z REST 设计和实现的单性和强扩展性,有理q信,REST 会成ؓ Web 服务的一个重要架构实践领域?/p><img src ="http://www.aygfsteel.com/diggbag/aggbug/361703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/diggbag/" target="_blank">哲同</a> 2011-10-21 11:05 <a href="http://www.aygfsteel.com/diggbag/articles/361703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mark:温习一下Oracle中常说的HA、RAC、Datagurad的区?/title><link>http://www.aygfsteel.com/diggbag/articles/361401.html</link><dc:creator>哲同</dc:creator><author>哲同</author><pubDate>Mon, 17 Oct 2011 02:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/diggbag/articles/361401.html</guid><wfw:comment>http://www.aygfsteel.com/diggbag/comments/361401.html</wfw:comment><comments>http://www.aygfsteel.com/diggbag/articles/361401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/diggbag/comments/commentRss/361401.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/diggbag/services/trackbacks/361401.html</trackback:ping><description><![CDATA[<strong><font color="#0000ff">HA</font></strong>是High Availability 的首字母l合Q翻译过来,可以叫做高可用,或高可用性,高可用(环境Q。我觉得应该说HA是一个观念而不是一Ҏ一pd具体技术,p|格一栗作q系l方案就知道了,评hpȝ的性能当中有一w可用。广义的高可用涉及到pȝ的各个方面,单来_让系l不会中?q行Q就是高可用。包括Y件的高可用,g的高可用Q网l的高可用等{。具体实现的Ҏ包括操作pȝ的集,数据库的集群Q硬件的冗余Q网l的冗余{等。做HA斚w的YӞ有IBM的HACMPQ很多常用AIX的hQ常说的HA指HACMPQؕ啊)、SUN的Sun Cluster、HP的MC/SG{?br /><br />?000q以前,大家谈HAQ大部分时候说的是操作pȝ一U的双机热备Q主品当时有IBM HACMP4.1QHP的MC/SG啥版本忘了,sun的系l很多h不用VCSQ用的是一个叫dataware的东ѝ现在很多hg的HA也还是这栗时至今日,HA包括的东西可多了,先不说其他方面,单就数据库,单就OracleQ与HA相关的品先后有Q高U复ӞAdvanceRepication)、OPS/RAC(Real Application ClusterQ、数据卫士(Data GuardQ、oracle(Oracle StreamsQ、分区(Oracle PartitionQ这hƾ品。照q么_RAC只是HAq个概念下的一个具体品而已Q目前ؓ止,只有RAC和分区是Oracle要收?licence的,其他的,只要l经验丰富的W三方实施方付一定的规划/设计及部|费用就可以了;当然Q也可以自己照着文档依葫芦画瓢,但是q样弄出的环境是否能辑ֈ高可用就难说了。事实上Q大部分人所说的HAQ还是狭义上的HAQ也是OS一U的双机热备?br /><br /><strong><font color="#0000ff">RAC</font></strong>是real application cluster的简Uͼ它是在多个主Zq行一个数据库的技术,x一个db多个instance。它的好处是 可以由多个性能较差的机器构建出一个整体性能很好的集,q且实现了负载均衡,那么当一个节点出现故障时Q其上的服务会自动{到另外的节点L行,用户?x觉不C么?br /><strong><br />双机热备QHAQ和RAC有啥区别?</strong><br /><br />1、对于硬件来_基本上一P׃n存储、光U线Q也有还用SCSIU的Q、多台小型机Q可以做多节点的怺热备Q也可以做多节点的RACQ、光U交换机Q如果是用光U卡的话Q;但做RACQ在L之间Q最好用高带宽|络交换机(虽然不用也可以做成)Q因此硬件成本相差不大?br />2、Y件呢Q差别可不小。如果是双机热备Q必M操作pȝU的双机理软gQ如果是RACQ目前还是徏议购买双机管理YӞ管10g的crs+asm可以摆脱双机软g了,但ASM目前实在太难伺候了Q,当然q得买RAC license?br />3、日常维护。RAC要求的技术含量更高,也应该更勤快。最关键的是得买oracle服务Q否则遇到有些问题(bugQ,你就比单不高可用了?br />4、优~点。这个,看看RAC的官方论q吧。如果能用好Q确实是很有好处的。目前我们的40多个客户的用情冉|看,RAC实大大降低了他们的downtimeQ另一斚w可以说就是提高了生力咯?br /><br /><font color="#0000ff"><strong>Dataguard</strong></font>一般是Z容灾的目的。是L据库的备用库Qstandby 库)通过自动传送和接受archivelogQƈ且在dataguard库自动apply q些logQ从而达到和L据库同步的目的,可能dataguard 库是建立的异地的Q当d所在的区域出现了致命性的N?火灾、地震等)Q主库没法修复时Q这时可以切换dataguard Z库的模式Q对外提供服务,而它的数据基本是当前最新的。目前可能大家对?dataguard 库的使用已经拓展Z其他更多的用途,比如备䆾Q跑报表{等?img src ="http://www.aygfsteel.com/diggbag/aggbug/361401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/diggbag/" target="_blank">哲同</a> 2011-10-17 10:08 <a href="http://www.aygfsteel.com/diggbag/articles/361401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JTDS驱动q接SQLServer异常解决http://www.aygfsteel.com/diggbag/articles/360263.html哲同哲同Sun, 09 Oct 2011 05:22:00 GMThttp://www.aygfsteel.com/diggbag/articles/360263.htmlhttp://www.aygfsteel.com/diggbag/comments/360263.htmlhttp://www.aygfsteel.com/diggbag/articles/360263.html#Feedback0http://www.aygfsteel.com/diggbag/comments/commentRss/360263.htmlhttp://www.aygfsteel.com/diggbag/services/trackbacks/360263.html1.出现的问?span lang="EN-US">
  日志文g没有新的输出?span lang="EN-US">

2.问题分析
  dump
出堆栈,如下Q?span lang="EN-US">
  "main" prio=10 tid=0x000000005de12000 nid=0x27e8 runnable [0x0000000040240000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.DataInputStream.readFully(DataInputStream.java:178)
    at java.io.DataInputStream.readFully(DataInputStream.java:152)
    at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:842)
    at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:723)
   
- locked <0x0000000759fd9f90> (a java.util.ArrayList)
    at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466)
    at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:135)
    at net.sourceforge.jtds.jdbc.ResponseStream.readString(ResponseStream.java:290)
    at net.sourceforge.jtds.jdbc.ResponseStream.readNonUnicodeString(ResponseStream.java:274)
    at net.sourceforge.jtds.jdbc.TdsData.readData(TdsData.java:936)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsRowToken(TdsCore.java:3007)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2270)
    at net.sourceforge.jtds.jdbc.TdsCore.getNextRow(TdsCore.java:765)
   
at net.sourceforge.jtds.jdbc.JtdsResultSet.next(JtdsResultSet.java:596)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
    at org.apache.commons.dbcp.DelegatingResultSet.next(DelegatingResultSet.java:207)
    at com.jd.cis.worker.OppProductWorker.importData(OppProductWorker.java:310)
    at com.jd.cis.worker.BaseWorker.importDataSource(BaseWorker.java:416)
    at com.jd.cis.worker.OppProductWorker.doRun(OppProductWorker.java:276)
    at com.jd.cis.worker.BaseWorker.run(BaseWorker.java:448)
    at com.jd.cis.worker.OppProductWorker.main(OppProductWorker.java:564)

   
上面有锁Q对应的代码?span lang="EN-US">
    statement.setFetchSize(1000);
    .....
    resultSet = statement.executeQuery();
    while (resultSet.next()) {
       ......
    }
   
查询相关文档Q了解到JTDS默认?span lang="EN-US">socketTimeout?span lang="EN-US">0Q即d数据没有时旉?span lang="EN-US">
    当数据链接意外终止的时候,JDTS可能不刎ͼ׃一直等待数据,dq程?span lang="EN-US">

    在本地重现该问题Q在循环体里面设|断点,q入断点后,断掉所有网l链接,取消断点Ql运行,发现E序被一致阻塞了?span lang="EN-US">
    当设|?span lang="EN-US">socketTimeout?span lang="EN-US">60U,重试Q程序阻?span lang="EN-US">60U后抛出异常?span lang="EN-US">

    该问题在查询SQLServer数据库,大数据量查询Q分批获取的时候,Ҏ出现
   
3.
解决Ҏ
 
?span lang="EN-US">jdts?span lang="EN-US">url链接中加?span lang="EN-US">socketTimeoutQ单位秒Q的讄Q或?span lang="EN-US">dbcp中如下设|?span lang="EN-US">
  <property name="connectionProperties" value="characterEncoding=UTF-8;socketTimeout=60"/>
 
q个参数?span lang="EN-US">mybatis?span lang="EN-US">defaultStatementTimeout 参数是不一L

 
同时Worker中加入异常捕获重试机?span lang="EN-US">


哲同 2011-10-09 13:22 发表评论
]]>
վ֩ģ壺 ƫ| | ٹ| ɽ| | Ȫ| | | ¡| ຣʡ| | Ͽ| ۲| | °| ƽ| Դ| ƺ| | | ̫| ƺ| | | | ֬| Ҷ| ˮ| ٸ| ƫ| | | | ˿| | | ٰ| | | ʯȪ| ǡ|