2009年7月22日星期三

如何修改IntelliJ IDEA启动时默认打开的工程

由于IDEA每次打开时默认打开上次的工程,这个过程往往比较长,而有时希望打开的却是另外一个工程,有没有办法修改打开的工程呢?
 
办法是肯定的,打开如下路径下的文件other.xml:
C:\Documents and Settings\xxx\.IntelliJIdea80\config\options\other.xml
 
找到并调整下面内容中的option、lastPath两个值即可,当然,如果想做得更方便可专门做个小程序来管理这些值,可以灵活调整:
  <component name="RecentProjectsManager">
    <option name="recentPaths">
      <list>
        <option value="G:\mydocs\xxx\engineering\src\project\xxx.ipr" />
        <option value="G:\mydocs\xxx\engineering\xxx\project_files\idea7\xxx.ipr" />
        <option value="E:\workdir\svn\sdcsi\engineering\src\idea5_tomcat5.5\xxx.ipr" />
        <option value="E:\workdir\svn\xxx\engineering\projects\xxx\src\project_files\idea8_clean\xxx.ipr" />
      </list>
    </option>
    <option name="lastPath" value="G:\mydocs\xxx\engineering\src\project\xxx.ipr" />
  </component>
 
 
 

2009年7月2日星期四

解决weblogic10下部署spring+hibernate3不兼容问题

让weblogic优先加载webapp的lib。
在WEB-INF下新建weblogic.xml,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90">
<container-descriptor>   
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
 
 
 
 

2009年6月24日星期三

org.apache.torque.util.LargeSelect实现分页查询和torque generator代码产生器

org.apache.torque.util.LargeSelect实现分页查询示例:
    Criteria crit = new Criteria();
    crit.add(CmsCategoryPeer.CATEGORY_ID, cat.getCategoryId());
    crit.addJoin(CmsCategoryPeer.CATEGORY_ID, CmsCatContentPeer.CATEGORY_ID);
    crit.addJoin(CmsCatContentPeer.CONTENT_ID, CmsContentPeer.CONTENT_ID);
    ... ...
    LargeSelect largeSelect = new LargeSelect(crit, size, offset);
    List rs = largeSelect.getPage(offset);
 
torque generator代码产生器:
http://db.apache.org/torque/releases/torque-3.3/generator/index.html
 
 
 

2009年5月25日星期一

用subst命令解决xp home无法共享文件夹的问题

一直苦寻xp home下如何共享文件夹无解,幸好一个同事帮我解决了。
在cmd中执行下面命令,即可将E:\workdir\svn虚拟成Z:盘
subst z: E:\workdir\svn
 

2009年5月24日星期日

Eclipse3.1.4 JEE web开发攻略

以前一直不会用Eclipse开发web,而习惯用MyEclipse替代,今天正好有点空,发现了Eclipse JEE其实也蛮好的支持了web开发。
我用的是jdk1.5,tomcat5.5
 
1、创建Dynamic web project,按照向导指定tomcat,如果没有new一个tomcat。
 
2、web工程可以依赖其他java project,可以指定jar或者library,但要注意下面一点。
 
3、在工程属性中,有三处设置,即Java Build Path,Java EE module Dependencies,Project References
第一个设置本工程要引入的jar或者library。
第二个地方,设置是否将依赖的jar、library、java工程classes输出到发布的web的lib目录下。
第三个,用来申明依赖的其他java工程。
 
4、设置好后,可以在Servers标签中将该web发布到tomcat5.5,有个Publish to the Server按钮,可以点一下发布。
 
5、到workspace下的下面目录去确认真个发布的web是否完整:
.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\
注意:依赖的web工程并没有直接将其class放到classes下,而是打包成了jar放到lib下。
 
 

2009年5月4日星期一

eclipse快捷键-很方便但又难记住的几个快捷键

ctrl+shift+m 录入类名后,通过该快捷键快速import类
 
ctrl+m 最大化/最小化工作窗口
 
 
 
 

2009年3月20日星期五

weblogic10.3 tuning

         性能调优牵涉的东西很多,一套系统运行涉及到防火墙,路由器,web服务器,负载均衡器,应用服务器,db,在网络,jvmwls,服务器,操作系统调优等方面都有可能调优。

网络

网络调优主要指带宽,用集群复制,特别是同步复制,要求有很高带宽(比如100M)。可以观察包再发送的情况,出现retry时,可能就需要调优

集群中需要更大的网络带宽

特别是servletEJB复制session信息

使用压缩gzip

同一台机器也会出现带宽不够的情况

比如多个实例部署在一台机器上

JVM

除了sun标准的jdk,还有jrokitibm等特定jvm,有些不一样

weblogic下建议使用jrokit

他对某些cpu指令进行优化,可以提高20~50%性能

32/64位优化, mission controlruntime时,进行监控,找内存泄露在哪里产生,是哪个对象产生的

Real time特性(由JRockit支持)

限制事务必须在多少毫秒之后完成,有很好的实时性,保证GC及时回收,保证系统运行是平稳的

jrockit mission control

监控,发现内存泄露,是由哪个对象产生的

GC

不要使用System.gc(),会中断时间比较长

Object不需要时,将其置为null,可以释放大量的内存空间

影响GC的几点:

对象使用的频率

对象的life spans

relaitions between objects

多用pool,小的object不要使用pool,因为会带来GC的效率问题

weblogic consoleGC可进行手工GC

WLS

JNDI复制是通过知觉存根(stub)来进行同步的

session可以同步,但事务不能同步,只能手工迁移,迁完后需要清除,否则会有冲突,session bean就有这个问题

版本问题,可以通过将自己的jar放到classpath中的最前面,保证使用自己的jar和类

大版本号一致就可以进行集群

weblogic.jar中有util.Multicast进行多播测试

weblogic分成下面三个版本

weblogic standard editionweblogic enterprise editionoracle EM, cluster)、weblogic suite

native IO

console tuning里有个enable native io的选项,可以选中它,他会调用一些包,用操作系统本地io进行优化

tuning acceptbacking,它规定wls向操作系统请求的队列大小,如果许多客户端被拒绝,可以调高它

disable servlet and jsp page check

可以去掉servletjsp的检查,将其置为-1(不检查)

servlet-reload-check-secs=-1 in container-descritor

jsp-param pageCheckSeconds=-1

servletReload...=-1

EJB优化

stateless session beans and message driven beans

         max-beans-in-free-pool andd initial-beans-in-free-poo

use proven session-

JMS调优

wl_jms_perform_GD.htm

jms pooling

jms storefile store in9.0 much faster as in 8.1 sp4

prefer file-stoers over DB stores

server-side SAF消息的存储和转发,如果消息接收不到,消息就丢了

         clusterable,会自动retry,会提高50%性能

JDBC调优

连接池,把你的最小和最大设成一样的,数量一般跟你的并发线程数差不多

prepared-statement cache,缺省是10sql,更多可以在描述符中设置

如果有XA分布式事务就用它,肯定比你trycatch好得多,可以提高系统的稳定性

如果数据库没有同步功能(oracle可以做数据库间的同步),multipool只起到一个负载均衡作用

热部署

可以部署不同版本,如果发现有旧版本session发给旧版本处理,没有session发给新版本处理

weblogic集群

可支持系统无缝升级,console向导迁移

嵌套集群,比如广域网的集群(每个地方可以有自己的集群,比如上海可以用成都的集群能力)

代理服务器

weblogic有个war应用,里面有个servlet可以进行url过滤,将一些静态页面直接响应,只对后缀是jsp等才路由到集群去处理

WLS插件会解析sesison,写cookie指名其在哪个server上,端口等信息,起到负载均衡的作用

垂直方向集群

一台及其可以部署多个实例,可以进行负载均衡

proxy(比如apache server)与server(多个weblogic server)如何配合,要安装一些插件,包括cookie

corrence可以将业务对象也复制(不光是session),实现更好的集群

可以对对象进行集群,比如EJB对象,ejb存根具有知识管理功能,一旦一个实体bean出现故障,能动态路由另外一个

集群时,要清除掉down掉的server里面的jmsjta数据,否则会有冲突

jmsjdbc集群有些不一样,比如jdbc只能起到load balance,不能进行failover,因为一旦sql提交很难再failover

集群的范畴

局域网,城域网,广域网集群

前两者通过session复制同步方式集群,广域网用异步方式集群,并允许一定的延时

WAN广域网进行集群需要路由器有足够多的空间缓存路由信息,因为一旦发送失败必须要先缓存它们

管理服务器

心跳是管理服务其用心跳方式和被管理服务器进行同步(差不多10秒广播依次),如果错过了三次失败,会标记为失败,从管理服务器看得到状态,有健康状态检查

两层结构集群

两层结构间通信通过socket,而操作系统度打开socket数量有一定的数量,当达到一定数量时,势必会出现瓶颈, spring

多层集群(EJB

MVC来看集群

web web cache(提供web服务器,压缩减少网络负载)

中间应用层 coheencejava对象内存共享)

数据库层 RAC

 

wls常见问题排除

谁发起,谁结束的原则

事务控制问题,默认事务超时30s web console-domain-JTA-timeout seconds

连接池问题,没及时关掉,避免一些超长时间的数据库操作

wls9~10后,会根据线程数自动调整连接池的连接数量

数据库重启的问题,设置测试表,获取连接时可以测试连接是否正常

内存问题,操作系统对进程空间的限制,绝大多数系统有2G的限制

jdk控制栈和堆大小设置

定制定期内存回收小程序,循环调用system.gc()

SOA

WLS SOA = weblogic + OSBoracle service bus

Oracle weblogic提供的工具

JRMCWLDFAD4J等几个工具使用

weblogic内置的主动自我诊断框架 diagnostic framework

console的左下脚下,它会自动调整,也可根据管理员指定一些规则来自动调整

AD4J

有个更强大的工具,企业管理器诊断包application diagnosttics for Java(AD4J)

Times Ten

针对物理内存而设计的优化数据库,针对应用层设计

所有数据存于内存,采用关系型数据库,通过odbcjdbcsql92访问

session复制要求控制在2~3K

使用KISS(尽量小,简单)原则,尽量使用内存复制

不要使用很大的HTTPSession对象

尽量使用容器管理事务CMT

服务器

硬件调优

操作系统

操作系统tuning, 尤其是linuxunix,可以调整swap空间,process and threadstop paramentersfile descriptor等。 通过监控工具来手机资源利用情况,如cpu利用率,磁盘i/o,网络效率

文件描述符

操作系统把tcp套接字当作一种特殊的文件存储格式来处理,并用文件描述符来跟踪记录操作系统进程打开的套接字和文件。

time wait interval

应用程序关闭的tcp连接在被操作系统释放前,将现将纳入等待状态。套接字处于等待状态的时间称为time wait interval。操作系统会维护非配给改socket的资源,可尝试将该参数调低

swap空间

用完时会出现out of memory,死锁等,可增大swap空间

其他参考

操作系统调优有一些文档,比如solarishp uxibm aix

docs.sun.com/db/816-06

 

数据库

 

Java程序调优一般准则

避免频繁创建对象

 

RMI易用,但代价太大,可考虑使用socket

 

同步调用类ArrayListVector快很多,后者做了同步,还有很多其他collection

HasnMap-Hashtable

性能调优的衡量标准

TPS 系统响应时间 扩展性 其他