java技术

hibernate spring struts

BlogJava 联系 聚合 管理
  18 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

一、软件(利器)

1.1 Everything

Everything可以快速的搜索你本地硬盘(仅支持NTFS格式)的所有文件,速度秒杀一切工具,缺点就是只能根据文件名来搜索,不能根据内容来(这个Google Desktop Search也不太好用),但是这已经足够了。 
详情请 via 善用佳软-Everything:速度最快的文件名搜索工具 。 
Tips:尽量加一个快速打开的快捷键,比如我设置为F7,并过滤一些不想显示的文件,比如 .class 文件。 
Everything

1.2 Evernote

一款极致的免费笔记资料管理软件,支持多平台(支持PC、手机多平台… 遗憾的是不支持Linux)的数据网络同步,有了它,你就可以随时记录一些“灵感”,让你不在担心“哎,昨天我想什么来着?”,借用阿秋博客里的一句话——The palest ink is better than the best memory。

1.3 Unlocker

Java开发中,很多会有依赖或者关联关系,有的时候,你想移动或者删除一个文件(夹),但是发现“它正在使用”,那这个时候你就可以使用Unlocker, 它还可以帮助你,弹出USB的时候报设备正在使用的问题。

1.4 Chrome

这个不用我说了,只要你喜欢,什么浏览器都行,用着习惯就好。

二、开源库

2.1 jdbcdslog-exp

介绍jdbcdslog-exp之前我先来介绍下jdbcdslog,jdbcdslog是一款jdbc spy的开源项目,主要用来记录SQL中参数的真实值,使用Hibernate的你,应该知道,Log中SQL有很多的 “?” ,这就是参数,但是Hibernate并不能帮助我们显示出来,有这样的需求就可以使用jdbcdslog,当然jdbcdslog的功能不止这些,详情请浏览jdbcdslog的网站 http://code.google.com/p/jdbcdslog/ 和使用指南 http://code.google.com/p/jdbcdslog/wiki/UserGuide 。

jdbcdslog-exp是jdbcdslog的加强版(原始功能全部都有),目前由我一个人在维护,她的主页在 http://code.google.com/p/jdbcdslog-exp/ (github 上也有,就不贴了,搜搜就找到了),主要是在原来的基础上,改进了SQL显示的效果,提供更多的配置,让你随心所欲的使用,并支持Maven。以前写过一篇博客——更有效地跟踪Bug——记录带有详细参数值的SQL,对比分析了几种常见的 jdbc spy 工具并介绍了 jdbcdslog-exp,大家可以看看。你还可以通过SVN Checkout下来代码

1 
svn checkout http://jdbcdslog-exp.googlecode.com/svn/trunk/

这里详细说一下在我们的项目中如何使用: 
1). MSS-E(Weblogic) 
a) 把下载好的jdbcdslog.jar(e.g. jdbcdslog-1.0.6.2.jar) 放到 domains\msseDomain\lib 下; 
b) 配置classpath,Windows下修改 msseDomain\bin\setDomainEnv.cmd 中的 set PRE_CLASSPATH= … ,加上 jdbcdslog 的文件路径; 
c) 可以使用 Datasource(也就是修改 primary 下的 appctx-mss-app-main.xml中的 xxDataSource ,参考jdbcdslog 的 Wiki),建议使用 jdbc config,进入 msseDomain\config\jdbc 这个文件夹,具体修改如下:

1 2 3 4 5 6 7 
<driver-name>oracle.jdbc.xa.client.OracleXADataSource</driver-name> ==> <driver-name>org.jdbcdslog.ConnectionPoolXADataSourceProxy</driver-name>    <url>jdbc:oracle:thin:@10.100.53.85:1521:cmn</url> ==> <url>jdbc:oracle:thin:@10.100.53.85:1521:cmn?targetDS=oracle.jdbc.xa.client.OracleXADataSource</url>   

请按照上面的规则,替换jdbc文件夹下所有的配置文件(有7个,实际上也可以不用所有的都替换,替换需要的就可以了,还有最好先备份,方便随时还原或者切换jdbc配置文件)。 
d) 配置log4j,可以记录jdbcdslog 的 log, 修改 msseDomain\extconf\log4j.xml,添加

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
  <!-- logger: jdbcdslog -->   <logger name="org.jdbcdslog.StatementLogger">     <level value="INFO"/>   </logger>    <logger name="org.jdbcdslog.ResultSetLogger">     <level value="OFF"/>   </logger>     <logger name="org.jdbcdslog.SlowQueryLogger">     <level value="OFF"/>   </logger>    <logger name="org.jdbcdslog.ConnectionLogger">     <level value="OFF"/>   </logger> 

2). Report Server(JBoss) 
a) 把下载好的jdbcdslog.jar(e.g. jdbcdslog-1.0.6.2.jar) 放到 jboss_xxx\server\rs\lib 下; 
b) 修改 jboss_xxx\server\rs\deploy\oracle-xa-ds.xml 的 datasource,按照下面规则全部替换就可以了

1 2 3 4 5 6 7 
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class> ==> <xa-datasource-class>org.jdbcdslog.ConnectionPoolXADataSourceProxy</xa-datasource-class>  <xa-datasource-property name="URL">jdbc:oracle:thin:@10.100.53.85:1521:cmn</xa-datasource-property> ==> <xa-datasource-property name="URL">jdbc:oracle:thin:@10.100.53.85:1521:cmn?targetDS=oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-property> 

c) 配置log4j,可以记录jdbcdslog 的 log,修改 jboss_xxx\server\rs\conf\log4j.xml,添加

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
  <!-- logger: jdbcdslog -->   <logger name="org.jdbcdslog.StatementLogger">     <level value="INFO"/>   <appender-ref ref="RS_FILE"/>   </logger>    <logger name="org.jdbcdslog.SlowQueryLogger" additivity="false">     <level value="INFO"/>   </logger>    <logger name="org.jdbcdslog.ConnectionLogger" additivity="false">     <level value="INFO"/>   </logger>     <logger name="org.jdbcdslog.ResultSetLogger" additivity="false">     <level value="INFO"/>   </logger> 

具体的效果,请看我如何操作: 
jdbcdslog-exp

2.2 TableDataCopier

TableDataCopier 是copy某个数据库中某个表的数据到另一个数据库中(存在同样的表结构),e.g. 能够copy SIT DB 的 mc_instr 到 Local DB 的 mc_instr。具体的可以看看它在google code的主页:http://code.google.com/p/table-data-copier/

这个是以前做 OG Capture 的时候用的,主要是想从SIT搬一些数据过来,后面就做了一个统一点、有界面的程序,方便使用。现在看看,好像也没有多大的用途,不过还是分享出来,也许大家以后用得着。你也可以通过SVN Checkout下来代码

1 
svn checkout http://table-data-copier.googlecode.com/svn/trunk/ 

也贴个运行图(仅支持 jdk1.6+): 
TableDataCopier

三、SoapUI

关于SoapUI的简单使用,大家都很清楚,这里就不说了,下面说的是一些不常见的用法,再加一些性能测试方面的经验(这部分好早好早以前Lilian就有想法叫我讲的,现在只能靠这个机会弥补下了)。

3.1 File Import

MSSE 中还是有很多 File Import(Upload)类的Functions的,如果要用SoapUI做INT的话,免不了要处理 byte[] 类型的参数,那么如何通过SoapUI传递byte[](File)的参数了,实际上,也很简单,看图就很清楚了(如果看不清,麻烦请另存后再看大图,全篇文章通用)。 

3.2 Property Transfer

Property Transfer 就是在SoapUI不同的Test Steps之间传递数据,具体的可以看看文档 Transferring Property Values。通过下面的实例图你就创建了一个Property Transfer并添加了一个Transfer Value,而每个Transfer Value都有两个部分,一个是Source,一个是Target,都可以选择不同的Step和不同的Property。 
 
如何配置这些内容,请看一个例子。e.g.

在Mic2中,send msg step 需要一个参数,而这个参数是 login step 成功后的response,那么这种情况就可以这样: 
 
贴上要写的配置信息:

Source
1 2 
declare namespace ns1='http://mic2.taifook.com/'; //ns1:loginResponse/return 
Target
1 2 
declare namespace mic2='http://mic2.taifook.com/'; //mic2:send/arg0 

3.3 Groovy

在SoapUI中可以写一些脚本,这个脚本语言就是 Groovy ,实际上平常我们需要使用的Groovy还是很简单的(因为和Java很类似),下面举一些例子来看看: 
e.g.1

rand
1 2 
import static java.util.UUID.randomUUID randomUUID() as String 

这个就是用UUID作为一个随机字符串的例子,在Test Step中可以这样使用(上面Groovy Script 文件名为 rand)

1 
<arg2>${rand#result}</arg2> 

e.g.2

getAccount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
def num = Integer.parseInt(testRunner.testCase.getPropertyValue( "count" )) num = (++num) % 10 testRunner.testCase.setPropertyValue( "count", num + "") String[] acList = [ "02-0000000-22", "02-1000001-22", "02-2000002-22", "02-3000003-22", "02-4000004-22", "02-5000005-22", "02-6000006-22", "02-7000007-22", "02-8000008-22", "02-9000009-22" ] acList[num] 

这个就是顺序并轮流从一个长度为10的字符串数组里取一个元素(第一行有些错误,一开始得不到 count’s PropertyValue ,你可以用类似第三行先 set count = 0 后删除,或者手动添加 count PropertyValue,如何添加?请看共享文档),这个可以用来做一些性能测试的一些数据输入(可以做到尽量不同),用法和上面一样

1 2 3 
<arg3> &lt;MSG>&lt;REC instrCode="985" ... acId="${getAccount#result}" ... />&lt;/MSG> </arg3> 

e.g.3

initData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 
import au.com.bytecode.opencsv.CSVReader;  def filename = testRunner.testCase.getPropertyValue( "filename" ) log.info("[load data] CSV File Path and Name: " + filename) log.info("[load data] Reading the CSV...")  CSVReader reader = new CSVReader(new FileReader(filename));  def isHeader = true List approvalList = []  while ((nextLine = reader.readNext()) != null) {   if (isHeader) {       isHeader = false   } else {       approvalList.add nextLine   } } //set property to test case context  def loopCount = 0 log.info("[load data] Number of Approval: " + approvalList.size()) context.setProperty("approvalList",approvalList) context.setProperty("loopCount",loopCount);  // get property log.info("[loop start] Current Loop Count: " + context.loopCount); def msg = context.approvalList.remove(0)  testRunner.testCase.testSuite.getTestCaseByName("Approval").setPropertyValue("userid",msg[0]) testRunner.testCase.testSuite.getTestCaseByName("Approval").setPropertyValue("password",msg[1]) testRunner.testCase.testSuite.getTestCaseByName("Approval").setPropertyValue("key",msg[2]) testRunner.testCase.testSuite.getTestCaseByName("Approval").setPropertyValue("body","&lt;![CDATA[" + msg[3].trim() + "]]&gt;")  context.setProperty("loopCount", ++context.loopCount); 

看到没有,这个例子就很像Java了,用其它的Jar包(opencsv-xxx.jar,请把它放到SoapUI安装路径下的lib目录下)里的方法来读csv格式的文件,然后把读出来的数据放到List中并存到context中,后面还用到了getTestCaseByName获得当前的Test Case(本例中TestCase名为Approval,请注意:不是Test Step名),并赋值以供使用。使用这里的值,也很简单

1 
<arg0>${#TestCase#userid}</arg0> 

这里的例子只是冰山一角,更多的请参考: 
Tips & Tricks 
Property Expansion

3.4 Load Tests

Load Tests 就是使SoapUI连续多次执行一个Test Steps,很简单就可以创建了,在【Load Tests】选项【New LoadTest】就可以了,大概会是下面的样子,具体的测试方法你就可以亲自试试了(比如Limit,Threads等配置)。 

共享中有一份MIC2 SoapUI User Manual.doc的文档,是前面测试Mic2性能时候写的,加上MIC2-soapui-project.xml 和 MIC2 SoapUI Test.eml(email),应该就包括了上面的所有SoapUI知识了。

四、Eclipse常用插件

4.1 Easy Explore

Easy Explore 顾名思义,就是使在 Eclipse 里面浏览本地文件变的很简单。官方的插件有些些不足,不过还好,网上有人已经修改了,请看 改造easyexplore插件 ,可以下载里面的plugin并安装,重启即可使用。

4.2 KeepResident

KeepResident 是一款改进Eclipse性能的插件,个人感觉还是不错的,大家可以试用下。我的配置如下: 

4.3 quickmarks

quickmarks 是Eclipse中的一款书签插件,很简单实用,追踪代码非常有帮助。使用超简单的, Ctrl+Shift+[0-9] 加上或者取消书签, Alt+[0-9] 打开对应的书签。

4.4 eclipse-fullscreen

eclipse-fullscreen 是一款能够让eclipse全屏的小插件,会让你的代码编辑窗口变得最大,充满整个屏幕。(小屏幕有福了,我留着备用)。

五、Eclipse最常用快捷键

以前也整理过一次(Eclipse/MyEclipse最最常用的快捷键),现在重新整理一次,尽量保持最简单最实用。子曰:工欲善其事,必先利其器。

快捷键 描述
Alt+/ 代码提示
Ctrl+D 删除当前行
Ctrl+Shift+O 作用是缺少的Import语句被加入,多余的Import语句被删除
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+C 在代码窗口中是这种注释(再次按下,取消注释)
Ctrl+F 查找/替换(这个谁都知道)
Ctrl+Shift+T 打开类型(查找文件很方便)
Ctrl+Shift+R 打开资源,和Ctrl+Shift+T不同的是,T是打开Java类文件,而R是所有文件
F2 显示详细信息
F3 跳到声明或定义的地方(这个我现在一般都使用Ctrl+鼠标左击了)
Ctrl+T 快速显示当前类的继承结构
Ctrl+/ 在代码窗口中是这种注释(推荐使用Ctrl +Shift + C注释)
Ctrl+Shift + / 块注释,不推荐使用,格式化后如果再想取消就比较麻烦了
Ctrl+Q 定位到最后编辑的地方
Ctrl[+Shift]+K 参照选中的Word快速定位到下[上]一个
Alt+[↓ or ↑] 当前行和下/上面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Ctrl+Alt+[↓ or ↑] 复制当前行到下/上一行(复制增加)
Ctrl+Shift+X 把当前选中的文本全部变为大写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Alt+Shift+R 重命名(当然,F2也能有一样的作用)
Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了)
Alt+Shift+L 抽取本地变量
posted on 2012-03-31 11:09 just 阅读(456) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: