﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-向左走向右走</title><link>http://www.blogjava.net/midstr/</link><description>人生總有許多的意外, 
握在手裡的風箏也會... 
突然斷了線——人生總有許多的巧合，
兩條平行綫也可能會...
有交滙的一天</description><language>zh-cn</language><lastBuildDate>Wed, 09 Jul 2008 10:27:43 GMT</lastBuildDate><pubDate>Wed, 09 Jul 2008 10:27:43 GMT</pubDate><ttl>60</ttl><item><title>java性能测试工具</title><link>http://www.blogjava.net/midstr/archive/2008/05/22/202202.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Thu, 22 May 2008 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/05/22/202202.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/202202.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/05/22/202202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/202202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/202202.html</trackback:ping><description><![CDATA[&nbsp; 商业工具&nbsp;&nbsp;<a title="三款java分析器点评" href="http://www.yesky.com/SoftChannel/72342371961929728/20031005/1733975.shtml">三款java分析器点评</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、Jprofiler ej-techologies&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、Borland Optimizeit Suite <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、Quest Jprobe Quest Software&nbsp;<br />
<br />
&nbsp; 免费工具<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、Eclipse&nbsp;Profiler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf"><a href="http://sourceforge.net/projects/eclipsecolorer/">http://sourceforge.net/projects/eclipsecolorer/</a></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、netbeans Profile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<font style="background-color: #cce8cf"><a href="http://profiler.netbeans.org/index.html">http://profiler.netbeans.org/index.html</a></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、Eclipse TPTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf"><a href="http://www.eclipse.org/tptp/">http://www.eclipse.org/tptp/</a></font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<a title="open source profiler for java" href="http://www.manageability.org/blog/stuff/open-source-profilers-for-java/view">open source profiler for java</a>&nbsp;&nbsp; zz
<blockquote>
<ul>
    <li><a href="http://profiler.cougaar.org/">Cougaar Memory Profiler<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - The Cougaar memory profiler is a tool for debugging memory usage and leaks in any Java application. It features a scalable 100% Java design that is lighter weight than existing JVMPI-based profilers. The profiler tracks memory usage within the application by using tables of WeakReferences.
    <li><a href="http://oss.metaparadigm.com/jmemprof/">JMemProf<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - JMemProf is a live Java memory profiler suitable for deployment in web containers such as JBoss, Tomcat and others. JMemProf allows you to retrieve memory profile information while your application is running. JMemProf aims to add dynamic visibility to memory usage in Java web applications; memory profile information can be viewed easily through a Servlet based web interface while the application is running. It is much more dynamic and easily understandable than that of the hprof heap profiler bundled with the J2SDK.
    <li><a href="http://www.khelekore.org/jmp/">JMP<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - JMP is a profiler for java that can be used to trace objects usage and method timings. JMP uses the JVMPI interface to gather statistics and interact with the JVM. JMP uses a GTK+ interface to show the status.
    <li><a href="http://ejp.sourceforge.net/">Extensible Java Profiler<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - Extensible Java Profiler (EJP) is a profiling tool for Java with a scalable and extensible architecture, allowing its usage for exotic programming languages that use a Java backend. EJP is based on the Java Virtual Machine Profiler Interface (JVMPI). It can be used to trace the execution of small parts of Java programs and display it in hierarchical trees with some elements hidden or highlighted.
    <li><a href="http://www.javaperformancetuning.com/tools/jamon/index.shtml">JAMon <img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a>- The Java Application Monitor (JAMon) is a free, simple, high performance, thread safe, Java API that allows developers to easily monitor production applications. JAMon can be used to determine application performance bottlenecks, user/application interactions, and application scalability. JAMon gathers summary statistics such as hits, execution times (total, average, minimum, maximum, standard deviation), and simultaneous application requests. JAMon statistics are displayed in the sortable JAMon report.
    <li><a href="http://jmechanic.sourceforge.net/">jMechanic<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - jMechanic is an Eclipse Java IDE plugin providing Java Profiling tools. Tools such as CPU Sampling and Heap Summary allow the Java developer to tune up the performance of their Java programs all within the comfort of the Eclipse IDE.
    <li><a href="http://jrat.sourceforge.net/">JRat<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - JRat is the Java Runtime Analysis Toolkit. Its purpose is to enable developers to better understand the runtime behavior of their Java programs. There are currently a number of ways JRat can monitor an application (i.e. Bytecode instrumentation, JBoss AOP, Dynamic Proxies, JDI).
    <li><a href="http://eclipsecolorer.sourceforge.net/index_profiler.html">Eclipse Profiler<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - This is a plugin for the Eclipse platform which allows java code profiling.
    <li><a href="http://xdprof.sourceforge.net/">xdProf<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - xdProf is a cross-platform tool that captures and analyzes stack traces sent at a fixed interval from Java Virtual Machines in a distributed system. The performance impact of the xdProf client sending data over a local area network is minimal: less than a 8% increase in total elapsed time for a set of standard benchmarks.
    <li><a href="http://www.eclipse.org/hyades/">Hyades<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - Hyades is an integrated test, trace and monitoring environment, based on Eclipse, that provides standards, tools and tool interoperability across the test process.
    <li><a href="http://www.experimentalstuff.com/Technologies/GCspy/">GCSpy <img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a>- The Garbage Collector Spy Tool, or GCspy for short, is a generic and highly-adaptable heap visualisation framework, designed to visualise a wide range of memory management systems, whether they depend on garbage collection or implement explicit de-allocation.
    <li><a href="http://www.virtualmachine.de/">heapprofile<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - A zero-overhead JVMPI plugin for finding first indications of memory leaks in production environments. Where commercial tools kill the performance of your application by collecting uninteresting performance data (such as 'who allocated this object'), this plugin stays inactive during runtime and simply dumps a very simple image of the Java heap on request.
    <li><a href="http://www.sable.mcgill.ca/~bdufou1/AdaptJ/main.html">AdaptJ<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - The AdaptJ Agent allows to collect event trace data from a Java program running in a Java Virtual Machine. The AdaptJ Analysis Tool allows to read and analyze the traces generated by the agent, using either the built-in analyses or custom ones.
    <li><a href="http://jcoverage.sourceforge.net/">JavaTreeProfiler<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - JVMPI based visualization using a TreeMap.
    <li><a href="http://besee.sourceforge.net/index.html">beeSee 2<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - beSee 2 provides a mechanism to plug a class preprocessor instrumentation layer in any classloader hierarchy, thus supporting java 1.3, 1.4, J2SE and J2EE environment. beSee 2 is the ground 0 lightweight layer of the next generation AOP architecture. It provides a bytecode kit independant solution and comes ready to use with two implementation: BCEL and Javassist.
    <li><a href="http://www.lambdacs.com/debugger/debugger.html">Omniscient Debugging<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - The debugger works by collecting "time stamps" which record everything that happens in a program. A GUI then allows you to navigate backwards in time to look at objects, variables, method calls, etc. Although focused on debugging, technique may be applicable for Profilers.
    <li><a href="http://developers.sun.com/dev/coolstuff/hotswap/">HotSwap Client Tool<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - This is a GUI client tool that provides access to the HotSwap functionality. Using this tool, you can dramatically improve the time of the usual "test - find a bug - stop the program - change - recompile - restart the program" development cycle by removing the "stop" and "restart" elements from it. Furthermore, you can use it to patch "on-the-fly" deployed applications that need to run uninterrupted.
    <li><a href="http://www.sable.mcgill.ca/step/">STEP<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - Extsnible Program Trace Encoding. STEP providins a standard method for encoding general program trace data in a flexible and compact format. The system consists of a trace data definition language along with a compiler for the language and an encoding architecture that implements a number of common trace reduction techniques. The system simplifies the development and interoperability of trace clients by encapsulating the encoding process and presenting the data as an abstract object stream.
    <li><a href="http://appstats.sourceforge.net/">AppStats <img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a>- AppStats is a lightweight, open source framework developed and used by Grand Central Communications, Inc. to capture, analyze, and publicize health, performance, and monitoring statistics for Java applications.
    <li><a href="http://www.p6spy.com/index.html">P6Spy<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - P6Spy is an open source framework for applications that intercept and optionally modify database statements. P6Log intercepts and logs the database statements of any application that uses JDBC. P6Outage detects long-running statements that may be indicative of a database outage proble and will log any statement that surpasses the configurable time boundary during its execution. P6Outage was designed to minimize any logging performance penalty by logging only long running statements.
    <li><a href="http://profiler.netbeans.org/index.html">NetBeans Profiler<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - NetBeans Profiler is a project to integrate the JFluid profiling technoglogy, which is being developed by Sun, into the NetBeans IDE. The JFluid technology addresses this issue by providing a mechanism in the JVM(tm), which allows the user to turn profiling on and off at any time, and, equally important, to profile just a small subset of the code, that they are currently interested in. The profiled subset of the code and the type of profiling (CPU, memory, etc.) can be changed at any moment at run time. This is achieved mainly through dynamic bytecode instrumentation. Features include low overhead profiling, attaching to running applications, CPU Performance profiling, memory profiling, memory leak debugging and task-based profiling.
    <li><a href="http://fprofiler.sourceforge.net/">FProfiler<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - FProfiler is a Java Profiler using BCEL and log4j. Its very fast because it inserts the needed instructions into the Bytecode of the classes. It can be used to find Hotspots in Java programs, libs and servlet environments simply every Java class.
    <li><span class="link-https"><a href="https://hat.dev.java.net/">Heap Analysis Tool(HAT)</a></span> - The Heap Analysis Tool (HAT) helps to debug unnecessary object retention (sometimes called "memory leaks") by providing a convenient means to browse the object topology in a heap snapshot, which is generated by the Java VM. HAT reads a hprof file, then sets itself up as a web server--therefore allowing you to run queries against a heap dump contained within the hprof file.
    <li><a href="http://infrared.sourceforge.net/">InfraRED<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - InfraRED is a tool for monitoring performance of a J2EE application and diagnosing performance problems. It collects metrics about various aspects of an application&#8217;s performance and makes it available for quantitative analysis of the application. InfraRED uses AOP to weave the performance monitoring code into the application.
    <li><span class="link-https"><a href="https://glassbox-inspector.dev.java.net/">Glassbox Inspector</a></span> - The Glassbox Inspector project combines AspectJ and JMX for a flexible, modular approach to monitoring performance for enterprise systems. It provides correlated information to allow you to identify specific problems, but with low enough overhead to be used in production environments. It lets you capture statistics such as total counts, total time, and worst-case performance for requests, and will also let let you drill down into that information for database calls within a request.
    <li><a href="http://jiprof.sourceforge.net/">JIP<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - JIP is a code profiling tool much like the hprof tool that ships with the JDK. JIP allows you to turn the profiler on and off while the JVM is running. JIP is pure Java. It takes advantage of the Java5&#8482; feature which allows you to hook the classloader. When the profiler is turned off, there is almost no overhead associated with using JIP. JIP allows real world timings for every class in your code.
    <li><a href="http://www.mcs.vuw.ac.nz/~djp/djprof/">DJProf<img class="snap_preview_icon" id="snap_com_shot_link_icon" style="border-top-width: 0px; padding-right: 0px; background-position: -1058px 0px; display: inline; padding-left: 0px; font-weight: normal; border-left-width: 0px; min-height: 0px; left: auto; float: none; background-image: url(http://i.ixnp.com/images/v3.30/theme/silver/palette.gif); visibility: visible; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; vertical-align: top; width: 14px; line-height: normal; padding-top: 1px; background-repeat: no-repeat; font-style: normal; font-family: 'trebuchet ms', arial, helvetica, sans-serif; position: static; top: auto; height: 12px; background-color: transparent; border-right-width: 0px; text-decoration: none; maxheight: 2000px; maxwidth: 2000px; minwidth: 0px; cssfloat: none" alt="" src="http://i.ixnp.com/images/v3.30/t.gif" /></a> - DJProf is an experimental Java profiling tool which employs AspectJ to insert the necessary instrumentation for profiling rather than, for example, the Java Machine Profiler Interface (JVMPI). DJProf can be used to profile Java programs without modification (i.e. there is no need to recompile them for profiling) and does not require the user to have any knowledge of AspectJ. The Load-Time Weaving capability of AspectJ is utilised to make this possible. It supports several different modes of profiling such as heap usage, object lifetime, wasted time and time spent. </li>
</ul>
</blockquote>
<img src ="http://www.blogjava.net/midstr/aggbug/202202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-05-22 16:36 <a href="http://www.blogjava.net/midstr/archive/2008/05/22/202202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 編程式事務管理 zz</title><link>http://www.blogjava.net/midstr/archive/2008/05/16/200797.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Fri, 16 May 2008 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/05/16/200797.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/200797.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/05/16/200797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/200797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/200797.html</trackback:ping><description><![CDATA[&nbsp; <font style="background-color: #cce8cf"><a title="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398" href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398"><font style="background-color: #cce8cf">http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398</font></a></font><br />
<br />
這邊以一個簡單的例子來示範Spring的事務管理，對於事務管理定義，我們使用Spring提供的DefaultTransactionDefinition。
<p>　　以JDBC DataSource為例，我們可以使用org.springframework.jdbc.datasource.DataSourceTransactionManager（PlatformTransactionManager的一個實現）作為我們的事務管理員，我們在Bean定義檔中配置，並將DataSource注入給它，例如： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING/DTD&nbsp;BEAN/EN"&nbsp;"http://www.springframework.org/dtd/spring-beans.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="dataSource"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.jdbc.datasource.DriverManagerDataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="driverClassName"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.mysql.jdbc.Driver</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="url"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc:mysql://localhost:3306/TestDB</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="username"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">root</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="password"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="transactionManager"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.jdbc.datasource.DataSourceTransactionManager"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="userDAO"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="onlyfun.caterpillar.UserDAO"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="dataSource"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="transactionManager"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="transactionManager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
</div>
</div>
<p>　　我們定義了一個簡單的DAO物件，將transactionManager與dataSource注入至其中，UserDAO如下： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeHeader" style="border-bottom-style: solid"><strong>UserDAO.java</strong></div>
<div class="codeContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;onlyfun.caterpillar;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.sql.DataSource;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.jdbc.core.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.transaction.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.transaction.support.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.dao.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UserDAO&nbsp;{<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;DataSource&nbsp;dataSource;<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;PlatformTransactionManager&nbsp;transactionManager;<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setDataSource(DataSource&nbsp;dataSource)&nbsp;{<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.dataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dataSource;<br />
}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setTransactionManager(PlatformTransactionManager&nbsp;transactionManager)&nbsp;{<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.transactionManager&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;transactionManager;<br />
}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;insertUser(User&nbsp;user)&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/Images/dot.gif" />.<br />
}<br />
}<br />
</span></div>
</div>
</div>
<p>　　insertUser()方法中，我們將實現User的存儲，並使用事務管理，首先看看直接使用trransactionManager如何實現事務，我們需要事務定義，作為示範，這邊先使用Spring預設的即可：DefaultTransactionDefinition，我們的程式示範如下： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<pre class="code-java">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">DefaultTransactionDefinition&nbsp;def&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DefaultTransactionDefinition();<br />
TransactionStatus&nbsp;status&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;transactionManager.getTransaction(def);<br />
</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
JdbcTemplate&nbsp;jdbcTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate(dataSource);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring008',&nbsp;'caterpillar',&nbsp;'M',&nbsp;29)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring009',&nbsp;'momor',&nbsp;'F',&nbsp;26)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring010,&nbsp;'beckyday',&nbsp;'F',&nbsp;35)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(DataAccessException&nbsp;ex)&nbsp;{<br />
transactionManager.rollback(status);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;也可以執行status.setRollbackOnly();</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;ex;<br />
}<br />
transactionManager.commit(status);</span></div>
</pre>
</div>
</div>
<p>　　在上面的程式中，我們照常執行我們的SQL（為了簡化，我們直接將資料寫在SQL中了，而不是從User物件中取得），注意到我們故意在最後一行SQL中Spring010少寫了一個 ' ，這使得SQL句子不合語法，因而造成DataAccessException（封裝了SQLException），這個例外被catch區塊捕捉，因而執行rollback()取消之後的SQL，如果沒有發生錯誤，則最後我們使用commit()來提交操作。 </p>
<p>　　另一個簡便的方法是使用TransactionTemplate，它封裝了上面的事務流程，透過callback來完成事務，例如： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">TransactionTemplate&nbsp;transactionTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionTemplate(transactionManager);<br />
transactionTemplate.execute(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionCallbackWithoutResult()&nbsp;{<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doInTransactionWithoutResult(TransactionStatus&nbsp;status)&nbsp;{<br />
JdbcTemplate&nbsp;jdbcTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JdbcTemplate(dataSource);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring008',&nbsp;'caterpillar',&nbsp;'M',&nbsp;29)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring009',&nbsp;'momor',&nbsp;'F',&nbsp;26)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
jdbcTemplate.update(</span><span style="color: #000000">"</span><span style="color: #000000">INSERT&nbsp;INTO&nbsp;USER&nbsp;VALUES('Spring010,&nbsp;'beckyday',&nbsp;'F',&nbsp;35)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
});<br />
</span></div>
</div>
</div>
<p>　　這邊使用TransactionCallbackWithoutResult，並在它的doInTransactionWithoutResult()中進行SQL操作，如果執行中發生例外，則之前所有的操作取消，否則最後自動提交操作。如果操作完成您想要返回結果物件，則可以使用TransactionCallback，並實現其doInTransaction()，例如： </p>
<p>　代碼: </p>
<div class="code" style="border-top-style: solid; border-right-style: solid; border-left-style: solid; border-bottom-style: solid">
<div class="codeContent">
<pre class="code-java">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">TransactionTemplate&nbsp;transactionTemplate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionTemplate(transactionManager);<br />
Object&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;transactionTemplate.execute(<br />
</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TransactionCallback()&nbsp;{<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;doInTransaction(TransactionStatus&nbsp;status)&nbsp;{<br />
</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;作一些操作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;收集為結果物件&nbsp;resultObject</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;resultObject;<br />
});<br />
</span></div>
</pre>
</div>
</div>
<img src ="http://www.blogjava.net/midstr/aggbug/200797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-05-16 10:22 <a href="http://www.blogjava.net/midstr/archive/2008/05/16/200797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页播放器</title><link>http://www.blogjava.net/midstr/archive/2008/05/12/199980.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Mon, 12 May 2008 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/05/12/199980.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/199980.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/05/12/199980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/199980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/199980.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;一、Media Player 相关（http://msdn.microsoft.com/en-us/library/bb249259(VS.85).aspx）Media Player1、在html中嵌入的object模板，可以有多种版本，如下为我在项目中用到的：&nbsp;&nbsp;&nbsp;&nbsp;&lt;OBJECT&nbsp;ID="Player"...&nbsp;&nbsp;<a href='http://www.blogjava.net/midstr/archive/2008/05/12/199980.html'>阅读全文</a><img src ="http://www.blogjava.net/midstr/aggbug/199980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-05-12 11:24 <a href="http://www.blogjava.net/midstr/archive/2008/05/12/199980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增加静态方法要重启tomcat？</title><link>http://www.blogjava.net/midstr/archive/2008/04/21/194488.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Mon, 21 Apr 2008 04:54:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/04/21/194488.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/194488.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/04/21/194488.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/194488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/194488.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在开发过程中，给 <font style="background-color: #cce8cf">com.thunisoft.fy.business.sp.SelectListUtils 新增加了一个public static方法 <font style="background-color: #cce8cf">getTestSelectList()。在页面的处理的logic类里面使用的时候代码提示都可以提示出来，调用方法也没有报编译期错误。刷新界面后，后台运行到刚才调用的地方就报如下错误：</font></font><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">2008</span><span style="color: #000000">-</span><span style="color: #000000">04</span><span style="color: #000000">-</span><span style="color: #000000">21</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">12</span><span style="color: #000000">:</span><span style="color: #000000">30</span><span style="color: #000000">:</span><span style="color: #000000">27</span><span style="color: #000000">,</span><span style="color: #000000">032</span><span style="color: #000000">&nbsp;[com.thunisoft.summer.web.action.BaseAction]</span><span style="color: #000000">-</span><span style="color: #000000">[ERROR]&nbsp;runtime&nbsp;exception<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />java.lang.NoSuchMethodError:&nbsp;com.thunisoft.fy.business.sp.SelectListUtils.getTestSelectList()Lcom</span><span style="color: #000000">/</span><span style="color: #000000">thunisoft</span><span style="color: #000000">/</span><span style="color: #000000">fy</span><span style="color: #000000">/</span><span style="color: #000000">support</span><span style="color: #000000">/</span><span style="color: #000000">selectObj</span><span style="color: #000000">/</span><span style="color: #000000">SelectList;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.thunisoft.fy.spxt.pub.ajxq.AjxqLogic.displayZxAjxq_right(AjxqLogic.java:</span><span style="color: #000000">736</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.thunisoft.fy.spxt.pub.ajxq.AjxqLogic.displayAjxq_right(AjxqLogic.java:</span><span style="color: #000000">116</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:</span><span style="color: #000000">39</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:</span><span style="color: #000000">25</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Method.java:</span><span style="color: #000000">324</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.thunisoft.summer.web.action.MemoryAction.execute(MemoryAction.java:</span><span style="color: #000000">102</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:</span><span style="color: #000000">106</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:</span><span style="color: #000000">430</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.thunisoft.fy.web.struts.SummerRequestProcessor.process(SummerRequestProcessor.java:</span><span style="color: #000000">134</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.struts.action.ActionServlet.process(ActionServlet.java:</span><span style="color: #000000">1196</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:</span><span style="color: #000000">414</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.servlet.http.HttpServlet.service(HttpServlet.java:</span><span style="color: #000000">689</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.servlet.http.HttpServlet.service(HttpServlet.java:</span><span style="color: #000000">802</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000">237</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000">157</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.thunisoft.summer.web.filter.UserAASFilter.doFilter(UserAASFilter.java:</span><span style="color: #000000">111</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000">186</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000">157</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:</span><span style="color: #000000">46</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000">186</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000">157</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.thunisoft.summer.web.filter.CharsetFilter.doFilter(CharsetFilter.java:</span><span style="color: #000000">48</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000">186</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000">157</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:</span><span style="color: #000000">214</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:</span><span style="color: #000000">104</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:</span><span style="color: #000000">520</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:</span><span style="color: #000000">198</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:</span><span style="color: #000000">152</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:</span><span style="color: #000000">104</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:</span><span style="color: #000000">520</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:</span><span style="color: #000000">137</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:</span><span style="color: #000000">104</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:</span><span style="color: #000000">118</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:</span><span style="color: #000000">102</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:</span><span style="color: #000000">520</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:</span><span style="color: #000000">109</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:</span><span style="color: #000000">104</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:</span><span style="color: #000000">520</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:</span><span style="color: #000000">929</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:</span><span style="color: #000000">160</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:</span><span style="color: #000000">799</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:</span><span style="color: #000000">705</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:</span><span style="color: #000000">577</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:</span><span style="color: #000000">683</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Thread.run(Thread.java:</span><span style="color: #000000">534</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
&nbsp;&nbsp;&nbsp;&nbsp; 咨询同事，得到的是&#8220;增加静态方法&#8221;要重启tomcat服务。我重启了tomcat果然就没有问题了：）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 有点不太明白，为什么增加静态方法就要重启tomcat服务？这样在开发过程中如果经常增加static方法岂不是每次都要重启，然后就会很浪费时间了。另外，为什么如果我只是修改了原来已经存在的static方法的实现，则可以正常调试。
<img src ="http://www.blogjava.net/midstr/aggbug/194488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-04-21 12:54 <a href="http://www.blogjava.net/midstr/archive/2008/04/21/194488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE弹出窗口不能隐藏状态栏的问题</title><link>http://www.blogjava.net/midstr/archive/2008/04/21/194481.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Mon, 21 Apr 2008 04:16:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/04/21/194481.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/194481.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/04/21/194481.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/194481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/194481.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; 昨天碰到一个问题，我访问本地的程序，IE的弹出窗口是没有状态栏的，而在测试人员那里就有状态栏，导致界面显示不全。最后终于在网上找到如下的解释：</p>
<div align="center">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee">
<div align="left"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">我明明设置了状态栏不显示，在本地测试，localhost的情况下看不到状态栏，在127.</span><span style="color: #000000">0.0</span><span style="color: #000000">.1的情况下就显示状态栏。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />这是因为浏览器安全性越来越高了。是为了防止url欺骗。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />同一个地址如果用IP直接进行访问的话，会出现状态栏，而如果用域名进行访问的话，就不会出现了。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />这是ie的关系，信任站点就可以隐藏状态栏。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />解决办法：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />将这个IP访问的网站设为信任站点就行了。<br />
</span></div>
</div>
</div>
<p>&nbsp;&nbsp;&nbsp; 原来如此，我本地启动服务后一般都是用localhost访问的，测试一般都是直接用ip访问的。解决方法也很明显了，就是添加新人站点。为了不让每个客户都自己手动添加信任站点，一般要做一个ocx控件来自动添加。比如我在自己的信任站点里面就看到了工行的站点，但是我自己从来没有手工添加过。<br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/midstr/aggbug/194481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-04-21 12:16 <a href="http://www.blogjava.net/midstr/archive/2008/04/21/194481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自动换行的实现方法zz</title><link>http://www.blogjava.net/midstr/archive/2008/04/17/193659.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Thu, 17 Apr 2008 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/04/17/193659.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/193659.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/04/17/193659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/193659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/193659.html</trackback:ping><description><![CDATA[<div class="textbox-title">
<h4>自动换行的实现方法</h4>
<div class="textbox-label">[ 2006-02-24 22:42:39 pm | 作者: <a href="http://bijia.anyflex.cn/user.asp?act=view&amp;id=2">Bijia</a> ] </div>
</div>
<div class="textbox-fontsize">字体大小: <a href="javascript:setFontSize(14)" alt="字体大小: 大">大</a> | <a href="javascript:setFontSize(11)" alt="字体大小: 中">中</a> | <a href="javascript:setFontSize(9)" alt="字体大小: 小">小</a> </div>
<div class="textbox-content" id="textboxContent">1.（IE浏览器）white-space:normal; word-break:break-all;这里前者是遵循标准。<br />
<br />
#wrap{white-space:normal; width:200px; }<br />
或者<br />
#wrap{word-break:break-all;width:200px;}<br />
<br />
eg.<br />
&lt;div id="wrap"&gt;ddd1111111111111111111111111111111111&lt;/div&gt;<br />
<br />
效果：可以实现换行<br />
2.（Firefox浏览器）white-space:normal; word-break:break-all;overflow:hidden;同样的FF下也没有很好的实现方法，只能隐藏或者加滚动条，当然不加滚动条效果更好！<br />
<br />
#wrap{white-space:normal; width:200px; overflow:auto;}<br />
或者<br />
#wrap{word-break:break-all;width:200px; overflow:auto; }<br />
<br />
eg.<br />
<br />
&lt;div id="wrap"&gt;ddd1111111111111111111111111111111111111111&lt;/div&gt;<br />
<br />
效果：容器正常，内容隐藏<br />
对于table<br />
<br />
1. (IE浏览器)使用样式table-layout:fixed；<br />
eg.<br />
<br />
&lt;style&gt;<br />
.tb{table-layout:fixed}<br />
&lt;/style&gt;<br />
<br />
&lt;table class="tbl" width="80"&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
效果：可以换行<br />
2.(IE浏览器)使用样式table-layout:fixed与nowrap<br />
eg.<br />
<br />
&lt;style&gt;<br />
.tb {table-layout:fixed}<br />
&lt;/style&gt;<br />
<br />
&lt;table class="tb" width="80"&gt;<br />
&lt;tr&gt;<br />
&lt;td nowrap&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
效果：可以换行<br />
3. (IE浏览器)在使用百分比固定td大小情况下使用样式table-layout:fixed与nowrap<br />
<br />
&lt;style&gt;<br />
.tb{table-layout:fixed}<br />
&lt;/style&gt;<br />
<br />
&lt;table class="tb" width=80&gt;<br />
&lt;tr&gt;<br />
&lt;td width=25% nowrap&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />
&lt;/td&gt;<br />
&lt;td nowrap&gt;abcdefghigklmnopqrstuvwxyz 1234567890<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
效果：两个td均正常换行<br />
3.(Firefox浏览器)在使用百分比固定td大小情况下使用样式table-layout:fixed与nowrap,并且使用div<br />
eg.<br />
<br />
&lt;style&gt;<br />
.tb {table-layout:fixed}<br />
.td {overflow:hidden;}<br />
&lt;/style&gt;<br />
<br />
&lt;table class=tb width=80&gt;<br />
&lt;tr&gt;<br />
&lt;td width=25% class=td nowrap&gt;<br />
&lt;div&gt;abcdefghigklmnopqrstuvwxyz 1234567890&lt;/div&gt;<br />
&lt;/td&gt;<br />
&lt;td class=td nowrap&gt;<br />
&lt;div&gt;abcdefghigklmnopqrstuvwxyz 1234567890&lt;/div&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
<br />
这里单元格宽度一定要用百分比定义<br />
效果：正常显示，但不能换行（注：在FF下还没有能使容器内容换行的好方法，只能用overflow将多出的内容隐藏，以免影响整体效果） <script type="text/javascript"><!-- google_ad_client="pub-0735278824539284" ; google_ad_width="336;
google_ad_height" = 280; google_ad_format="336x280_as" ; google_ad_type="text_image" ;
//2007-03-31: Blog google_ad_channel="1866782038" ; google_color_border="F3F9FD" ; google_color_bg="F3F9FD" ; google_color_link="000000" ; google_color_text="000000" ; google_color_url="000000" ;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script></div>
<img src ="http://www.blogjava.net/midstr/aggbug/193659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-04-17 10:28 <a href="http://www.blogjava.net/midstr/archive/2008/04/17/193659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js调试</title><link>http://www.blogjava.net/midstr/archive/2008/04/10/191832.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Thu, 10 Apr 2008 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/04/10/191832.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/191832.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/04/10/191832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/191832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/191832.html</trackback:ping><description><![CDATA[<p dir="ltr" style="margin-right: 0px">1、使用window.onerror方法，类似如下代码：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_69_194_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_194_Open_Text.style.display='none'; Codehighlighter1_69_194_Closed_Image.style.display='inline'; Codehighlighter1_69_194_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_69_194_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_194_Closed_Text.style.display='none'; Codehighlighter1_69_194_Open_Image.style.display='inline'; Codehighlighter1_69_194_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;fnErrorTrap(sMsg,sUrl,sLine)</span><span id="Codehighlighter1_69_194_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_69_194_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">Error:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;sMsg&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;sLine&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">URL:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;sUrl&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;window.onerror</span><span style="color: #000000">=</span><span style="color: #000000">fnErrorTrap;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
<p><font style="background-color: #cce8cf">2、Companion.JS</font>工具（only for IE），网上说的是要和Microsoft Script Debuger 一起用，但我实际使用中发现可以单独安装使用。 </p>
<p>3、Microsoft Script Debuger ，一般情况下需要单独安装，暂时还不太会用：) </p>
<p>4、Microsoft Script Editor，一般不需要单独安装，在office中自带。 </p>
<img src ="http://www.blogjava.net/midstr/aggbug/191832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-04-10 13:15 <a href="http://www.blogjava.net/midstr/archive/2008/04/10/191832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>attachEvent与addEventListener(zz)</title><link>http://www.blogjava.net/midstr/archive/2008/04/01/190215.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Tue, 01 Apr 2008 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/04/01/190215.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/190215.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/04/01/190215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/190215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/190215.html</trackback:ping><description><![CDATA[<div class="tit">attachEvent与addEventListener</div>
<div class="date">2008-03-13 10:33</div>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">attachEvent方法，为某一事件附加其它的处理事件。（不支持Mozilla系列）<br />
            <br />
            addEventListener方法 用于 Mozilla系列<br />
            <br />
            举例:
            <div class="code"><font color="#ff0000">document</font>.getElementById(<font color="#ff00ff">"btn"</font>).onclick = method1;<br />
            <font color="#ff0000">document</font>.getElementById(<font color="#ff00ff">"btn"</font>).onclick = method2;<br />
            <font color="#ff0000">document</font>.getElementById(<font color="#ff00ff">"btn"</font>).onclick = method3;</div>
            如果这样写,那么将会只有medhot3被执行<br />
            <br />
            写成这样：<br />
            var btn1Obj = document.getElementById("btn1");
            <div class="code"><font color="#008000">//object.attachEvent(event,function);</font><br />
            btn1Obj.attachEvent(<font color="#ff00ff">"onclick"</font>,method1);<br />
            btn1Obj.attachEvent(<font color="#ff00ff">"onclick"</font>,method2);<br />
            btn1Obj.attachEvent(<font color="#ff00ff">"onclick"</font>,method3);</div>
            执行顺序为method3-&gt;method2-&gt;method1<br />
            <br />
            如果是Mozilla系列，并不支持该方法，需要用到addEventListener
            <div class="code"><font color="#0000ff">var</font> btn1Obj = <font color="#ff0000">document</font>.getElementById(<font color="#ff00ff">"btn1"</font>);<br />
            <font color="#008000">//element.addEventListener(type,listener,useCapture);</font><br />
            btn1Obj.addEventListener(<font color="#ff00ff">"click"</font>,method1,<font color="#0000ff">false</font>);<br />
            btn1Obj.addEventListener(<font color="#ff00ff">"click"</font>,method2,<font color="#0000ff">false</font>);<br />
            btn1Obj.addEventListener(<font color="#ff00ff">"click"</font>,method3,<font color="#0000ff">false</font>);</div>
            执行顺序为method1-&gt;method2-&gt;method3<br />
            <br />
            使用实例：<br />
            <br />
            1。
            <div class="code"><font color="#0000ff">var</font> el = EDITFORM_DOCUMENT.body; <br />
            <font color="#008000">//先取得对象，EDITFORM_DOCUMENT实为一个iframe</font><br />
            <font color="#0000ff">if</font> (el.addEventListener){<br />
            el.addEventListener('click', KindDisableMenu, <font color="#0000ff">false</font>);<br />
            } <font color="#0000ff">else</font> <font color="#0000ff">if</font> (el.attachEvent){<br />
            el.attachEvent('onclick', KindDisableMenu);<br />
            }</div>
            2。
            <div class="code"><font color="#0000ff">if</font> (<font color="#ff0000">window</font>.addEventListener) {<br />
            <font color="#ff0000">window</font>.addEventListener('load', _uCO, <font color="#0000ff">false</font>);<br />
            } <font color="#0000ff">else</font> <font color="#0000ff">if</font> (<font color="#ff0000">window</font>.attachEvent) {<br />
            <font color="#ff0000">window</font>.attachEvent('onload', _uCO);<br />
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/midstr/aggbug/190215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-04-01 22:17 <a href="http://www.blogjava.net/midstr/archive/2008/04/01/190215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发中常用的几个eclipse插件</title><link>http://www.blogjava.net/midstr/archive/2008/03/16/186592.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Sun, 16 Mar 2008 04:20:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/03/16/186592.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/186592.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/03/16/186592.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/186592.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/186592.html</trackback:ping><description><![CDATA[<ol>
    <li><font style="background-color: #cce8cf">Myeclipse 主要用于eclipse的web开发，虽然它不是免费的，但我们一直在免费使用，因为网上的注册码太多了。</font>
    <li><font style="background-color: #cce8cf">Fatjar 一个易用的打包工具，会将编译用到的所有资源进行打包。如果是web项目打包，还是用myeclispe的export-&gt;WAR（EAR）</font>
    <li><font style="background-color: #cce8cf">Jode 反编译功能很好用。</font>
    <li>Hibernate Sychronizer（HibernateTools） 据说很好用。
    <li>JSEclipse（A<font style="background-color: #cce8cf">ptana</font>） 效果正在试用中。
    <li><font style="background-color: #cce8cf">PropertiesEditor</font> 属性文件编辑器&nbsp; <font style="background-color: #cce8cf"><a href="http://propedit.sourceforge.jp/eclipse/updates/">http://propedit.sourceforge.jp/eclipse/updates/</a></font>
    <li>SpringIDE&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf"><a href="http://springide.org">http://springide.org</a></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://springide.org/updatesite/">http://springide.org/updatesite/</a>
    <li>EclEmma 最近才开始了解。</li>
</ol>
<img src ="http://www.blogjava.net/midstr/aggbug/186592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-03-16 12:20 <a href="http://www.blogjava.net/midstr/archive/2008/03/16/186592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2008年</title><link>http://www.blogjava.net/midstr/archive/2008/01/03/172584.html</link><dc:creator>向左走向右走</dc:creator><author>向左走向右走</author><pubDate>Thu, 03 Jan 2008 14:16:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/01/03/172584.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/172584.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/01/03/172584.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/172584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/172584.html</trackback:ping><description><![CDATA[<span style="font-family: 楷体_GB2312">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 终于有点明白生活了，如梦方醒。2008年我想多听点好歌，最近发现的一首《庆幸你有爱我》<br />
&nbsp;<br />
<br />
</span>
<p><span style="font-family: 楷体_GB2312">蔡淳佳 - 庆幸有你爱我<br />
</span></p>
<p><span style="font-family: 楷体_GB2312">失去和拥有 刹那的感动<br />
人生有时候像一场梦<br />
醒着的时候 睁开了双眸<br />
不如意的很多</span></p>
<p><span style="font-family: 楷体_GB2312">朋友和情人 来的来走的走<br />
反反复复寻寻觅觅为了什么<br />
要多少时间 才能够了解<br />
其实有你就足够</span></p>
<p><span style="font-family: 楷体_GB2312">握着你的手 走过快乐和难过<br />
黑夜白昼 我们都曾经拥有<br />
人生是没有定律的一种节奏<br />
不如用心去感受</span></p>
<p><span style="font-family: 楷体_GB2312">快乐的一刻 胜过永恒的难过<br />
黑夜过后就有日出和日落<br />
两个人走不会寂寞<br />
每一刻都会珍惜 都会把握<br />
庆幸有你爱我</span></p>
<p><span style="font-family: 楷体_GB2312">失去和拥有 泪水和笑容<br />
人生有时候像一场梦<br />
累了的时候 闭上了双眸<br />
谁在回忆上游</span></p>
<p><span style="font-family: 楷体_GB2312">多少的朋友 来的来走的走<br />
聚散从来都不给任何的理由<br />
转过身以后 才忽然感受<br />
你一直都在背后</span></p>
<p><span style="font-family: 楷体_GB2312">握着你的手 走过快乐和难过<br />
黑夜白昼 每个人都会拥有<br />
人生是没有定律的一种节奏<br />
不如用心去感受</span></p>
<p><span style="font-family: 楷体_GB2312">快乐的一刻 胜过永恒的难过<br />
黑夜过后就有日出和日落<br />
两个人走不会寂寞<br />
每一刻都会珍惜 都会把握<br />
庆幸有你爱我</span></p>
<p><span style="font-family: 楷体_GB2312">握着你的手 走过快乐和难过<br />
黑夜白昼 每个人都会拥有<br />
人生是没有定律的一种节奏<br />
不必在乎的太多</span></p>
<p><span style="font-family: 楷体_GB2312">快乐的一刻 胜过永恒的难过<br />
黑夜过后就有日出和日落<br />
只要和你一起度过<br />
人生没几人懂我 懂得把握<br />
庆幸有你爱我</span></p>
<p><font style="background-color: #cce8cf"></font><span style="font-family: 楷体_GB2312">&nbsp;</span></p>
<img src ="http://www.blogjava.net/midstr/aggbug/172584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">向左走向右走</a> 2008-01-03 22:16 <a href="http://www.blogjava.net/midstr/archive/2008/01/03/172584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>