paulwong

#

换SSD硬盘的准备

4K对齐:在xp下使用专用工具,或者直接用win7对硬盘进行分区和格式化!千万不要直接用XP分区!测评软件分值4K对齐后比对齐前能高将近一倍。
开启ACHI模式:安装win7前就在bios中选择ACHI模式,或者安装好系统后,修改注册表(win7下开启achi修改方法:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci;在右窗格中,右键单击“名称”列中的“Start”,然后单击“修改”,将“3”改为“0”。),然后重新开机进入bios中修改为ACHI模式,测评分值再次提高50%以上!!!

安装win7启动很快,SSD硬盘在4K对齐的情况下性能会好些,如果是ghost安装系统的,大家可以用Paragon Alignment Tool去实现无损处理,不需要重装系统。

http://www.verycd.com/topics/2872729/

posted @ 2012-06-26 23:50 paulwong 阅读(242) | 评论 (0)编辑 收藏

SPRING INTERGRATION资源

http://wangleifire.iteye.com/blog/351749

https://src.springframework.org/svn/spring-integration/trunk

posted @ 2012-06-11 10:07 paulwong 阅读(341) | 评论 (0)编辑 收藏

SPRING INTERGRATION

将处理业务的流程拆分成一个一个链,前面处理完,再派给下一个,类似HTTP中的FILTER
不用安装服务器,内嵌在SPRING容器中,对外支持多种格式的数据,外部系统如要和SPRING INTERGRATION整合,不需要再进行开发
处理流程一般就是,ADAPTER去读取外部数据,转换后放到CHANNEL中,ENDPOINT处理CHANNEL中的数据,委派给下一个CHANNEL,下一个ENDPOINT处理,通过ADAPTER写到外部接口中。

  1. ADAPTER
    外部系统与CHANNEL之间的桥梁,获取外部数据将其放到CHANNEL去,有FTP,JMS,文件系统的

  2. CHANNEL
    里面放MESSAGE对象,MESSAGE里面可以放自定义对象,以提供消费者使用

  3. ENDPOINT
    CHANNEL的消费者,CHANNEL与ENDPOINT是一对一的关系,所以如果想在一个CHANNE下对应多个ENDPOINT,是做不到的,只能增加CHANNEL

    Service Activators:从INPUT CHANNEL中取出一个对象作为参数,调用设置的POJO的方法,将结果放到OUTPUT CHANNEL中
    Transformers:对CHANNEL中的对象进行类型转换
    决定流向的ENDPOINT:Routers,SPLITER

  4. 例子
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/integration"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans
="http://www.springframework.org/schema/beans"
    xmlns:stream
="http://www.springframework.org/schema/integration/stream"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/integration
            http://www.springframework.org/schema/integration/spring-integration.xsd
            http://www.springframework.org/schema/integration/stream
            http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd"
>

    
<gateway id="cafe" service-interface="org.springframework.integration.samples.cafe.Cafe"/>

    
<channel id="orders"/>
    
<!-- 此处orders里面的对象是一个一个Message,调用payload则取到Order
         调用items则得到OrderItem List,拆分成OrderItem以一个为单位放到
         drinks中
     
-->
    
<splitter input-channel="orders" expression="payload.items" output-channel="drinks"/>

    
<channel id="drinks"/>
    
<!-- 此处drinks里面的对象是一个一个OrderItem,调用iced则取到布尔值
         如果是true则放到coldDrinks中,如是false则放到hotDrinks中
     
-->
    
<router input-channel="drinks"  expression="payload.iced ? 'coldDrinks' : 'hotDrinks'"/>

    
<channel id="coldDrinks">
        
<queue capacity="10"/>
    
</channel>
    
<service-activator input-channel="coldDrinks" ref="barista" method="prepareColdDrink" output-channel="preparedDrinks"/>

    
<channel id="hotDrinks">
        
<queue capacity="10"/>
    
</channel>
    
<!-- 将输入通道中的OrderItem转成Drink -->
    
<service-activator input-channel="hotDrinks" ref="barista" method="prepareHotDrink" output-channel="preparedDrinks"/>

    
<channel id="preparedDrinks"/>
    
<!-- 将通道中的Drink按一个Order进行合并成一个List<Order>-->
    
<aggregator input-channel="preparedDrinks"  method="prepareDelivery" output-channel="deliveries">
        
<beans:bean class="org.springframework.integration.samples.cafe.xml.Waiter"/>
    
</aggregator>

    
<stream:stdout-channel-adapter id="deliveries"/>

    
<beans:bean id="barista" class="org.springframework.integration.samples.cafe.xml.Barista"/>

    
<poller id="poller" default="true" fixed-delay="1000"/>

</beans:beans>

posted @ 2012-06-11 10:04 paulwong 阅读(678) | 评论 (0)编辑 收藏

Hibernate Tools

Hibernate Tools是由JBoss推出的一个Eclipse综合开发工具插件,该插件可以简化ORM框架Hibernate,以及JBoss Seam,EJB3等的开发工作。Hibernate Tools可以以Ant Task以及Eclipse插件的形式运行。

Hibernate Tools Eclipse插件的特征

Hibernate Tools Eclipse插件具有以下特征或功能:
Mapping Editor(映射文件编辑器):该编辑器可以用来编辑Hibernate XML映射文件,提供代码自动补全,语法高亮功能。
- 类名的自动补全
- 属性/表的列名自动补全

Hibernate Console(Hibernate控制台):它提供一个全新的Eclipse Perspective窗口,可以执行HQL,并查看查询的结果。这是一个非常便利的工具,可以用来验证HQL的语法是否正确。

Configuration Wizards and Code generation(Hibernate配置文件hibernate.cfg.xml创建导航,以及代码生成器):支 持完全反向生成功能,可以从已有的数据库生成Hibernate配置文件hibernate.cfg.xml,同时支持"click-and- generate"方式生成Java代码(Hibernate POJOs),DAO,XML映射文件(.hbm.xml),以及schema 文档(.hml)等文件。

Eclipse JDT integration(代码补全):该工具支持Java代码中的HQL输入补全,以及对Java代码中的HQL语法加以合法性验证。

Hibernate Tools的使用

- Hibernate的配置文件hibernate.cfg.xml的生成
步骤:
1)Eclipse的菜单:选择[File] -> [New] -> [Other] -> [Hibernate/Hibernate Configuration file (cfg.xml) ],“Next”按钮
2)输入 [Database dialect] ,[Driver Class],[Connection URL],以及[DB用户名],[密码]等
3)按下[Finish]按钮,则自动生成hibernate.cfg.xml文件。
** "Create Console Configuration" checkbox默认为选择状态。被选择的情况下,则进入“Hibernate Console Configuration ”(Hibernate Console)设置/创建页面。

- 设置Hibernate Console

Hibernate Tools支持创建多个Hibernate Console。
1)Eclipse菜单:选择[File] -> [New] -> [Other] -> [Hibernate/Hibernate Console Configuration],“Next”按钮
2)在所显示的画面上输入Hibernate Console的名称[Name],目标项目名[Project],Hibernate配置文件(hibernate.cfg.xml)的路径[Configuration file]
3)按[Finish]按钮,则创建Hibernate Console,同时显示在"Hibernate Configurations"视图中。

- Reverse engineering and code generation:利用"click-and-generate" Reverse Engineering以及代码生成功能自动生成所需代码。
※使用Hibernate code generation(Hibernate代码生成器)之前,需要先配置/创建Hibernate Console。
1)可以从Hibernate 的Tool Bar,或"Run/Hibernate Code Generation"菜单启动Hibernate代码生成器。
2)在所显示的画面上,输入 创建好的Hibernate控制台名称[Console Configuration],输出路径「Output directory」等信息。
** 其它可以实际情况加以设置。
3)打开Explore标签,设置需要生成的代码类型(Domain code, DAO等)
4)设置完成之后,按下[Run]按钮
根据不同的配置,将自动生成Hibernate关联文件,EJB3,JBoss Seam等文件。

Hibernate Tools其它参考资料

Hibernate Tools Reference Guide  [官方文档]
Hibernate Tools Eclipse Plugins  [官方文档,Hibernate Tools Eclipse插件]

posted @ 2012-06-10 10:21 paulwong 阅读(332) | 评论 (0)编辑 收藏

JMS最简单的解释

JMS是远程调用的一种,如写了一个方法,想被远程JVM中的对象调用时,就作了这样一个规定,在本身的JVM中建一个队列:List,里面只能放这个方法所需参数类型的对象,如有马上执行本方法,执行后将此对象从队列中移除。远程对象如果想调用此方法,只需往这队列插对象即可。

posted @ 2012-06-06 10:18 paulwong 阅读(330) | 评论 (0)编辑 收藏

测试过程

  1. 单元测试
    有三个级别
    逻辑单元测试:就是方法级别的测试,方法中依赖的其他层对象用MOCK模拟,通常只针对控制层
    整合单元测试:联合几个层来测试,就是针对服务层,其依赖的持久不能模拟,数据库要打开,但可以用内存数据库
    界面单元测试:为了保证界面不出错,还包括页面数据验证不通过时的测试
  2. 持续构建和代码质量测试
    测试是否构建成功,代码质量和覆盖率是否达到标准
  3. 系统整合测试
  4. 功能测试
    通过UI验证是否符合系统用例和业务规则,主要看输入和输出
  5. 系统质量测试
    主要指性能测试是否符合非功能需求,并发用户和负载是否符合,及安全性和高可用性
  6. 用户接受测试
    模拟真实环境,根据用户手册和操作流程操作,测试是否符合业务需求

posted @ 2012-06-01 00:07 paulwong 阅读(271) | 评论 (0)编辑 收藏

"警告: 编码 GBK 的不可映射字符"怎么处理

完善api-doc,用eclipse生成javadoc的时候发生“编码 GBK 的不可映射字符 ”,很是恼火。其实是字符编码问题。
打开eclipse,project -> Generate javadoc 一项一项的选你要输出javadoc的项目,在VM设置中加入以下代码 -encoding utf-8 -charset utf-8

这次操作,输出的html代码不会发生“编码 GBK 的不可映射字符 ”问题,而且html字符编码都设为了UTF-8,问题彻底解决。

对应的ant target 如下

<target name="javadoc">

    
<echo>+---------------------------------------------------+</echo>
    
<echo>| Building Doc File |</echo>
    
<echo>+---------------------------------------------------+</echo>
    
    
<javadoc access="protected"
        additionalparam
="-encoding utf-8 -charset utf-8 "
        author
="true"
        classpath
="${classes.dir}"
        destdir
="${doc.dir}/api"
        nodeprecated
="false"
        nodeprecatedlist
="false"
        noindex
="false"
        nonavbar
="false"
        notree
="false"
        packagenames
="org.xxx.common.web.tag.go"
        source
="1.6"
        sourcepath
="${src.dir}"
        splitindex
="true"
        use
="true"
        version
="true"
        
>
        
<link href="http://java.sun.com/javase/6/docs/api/" />
    
</javadoc>
</target>

posted @ 2012-05-30 16:44 paulwong 阅读(897) | 评论 (0)编辑 收藏

JBOSS调优

WEB程序调优

1.纯JSP比JSF性能要好
2.树形数据的显示如果用JSF性能要差,不如用低层次的JAVASCRIPT
WEB SERVICE调优
1.性能不太好,尤其依赖于传输的SOAP大小,因为在XML与JAVA OBJECT的转换中消耗太多
2.加缓存在SOAP上
3.JBOSS的WEB SERVICE有三个实现,原生的、CXF和METRO,性能最好的是METRO,最差是原生的

JBOSS中的TOMCAT调优

1.CONNECTOR参数
当进入JBOSS的请求到达maxThreads,且又高于acceptCount的时候,用户就会收到Connection refused的错误信息,当HTTP请求的线程空闲了maxIdleTime时,系统就会杀掉这些线程,直到到达minSpareThreads数为止
2.如何计算程序就需的线程数
CPU数*200,如4核的设800
可以通过域名为jboss.web,name=http-127.0.0.1-8080,type=ThreadPool的MBEAN观察实际的线程数
3.处理周期长的WEB线程
WEB线程处理请求时,并不会马上结束,还会继续传递到EJB层,这样如果EJB层处理周期长,会导致WEB层请求数增长来处理新进来的请求
4.如何增大线程最大处理数
这完全依赖于CPU、RAM和SOCKET数
5.使用APACHE PORTABLE RUNTIME
增加APR包能提高性能20%,如果是WINDOWS系统则不建议
6.整合APACHE WEBSERVER与JBOSS SERVER
使用APACHE WEBSERVER作为JBOSS的前端,以达到HA的效果,又能提高20%的性能
结合方式是使用mod_jk mod_proxy_ajp mod_proxy_http
7.三种方式的比较
mod_proxy_ajp要高于其他两种
8.引入mod_cluster
9.web.xml中关于JSP的调优
development=false,避免访问前的检查
checkInterval=0,避免JSP需要重新编译
trimSpaces=true,删除JSP中的空格
genStringAsCharArray=true

JBOSS中SERVICE的调优

SESSION BEAN
1.stateless session bean在池中数量大小的配置
每建一个SESSION BEAN,就会在jboss.j2ee域下建一个MBEAN,通过查看其信息得知BEAN的处理统计时间来调整BEAN数量大小,配置文件:/deploy/ejb3-interceptors-aop.xml
2.stateful session bean
SFSB是被JBOSS缓存在容器中,因此客户端的每个请求都会立即响应,同样也是通过SLSB的方式查看并调整CACHE的数量大小
3.SFSB与 SLSB的比较
SFSB性能要差10%
4.事务
EJB与普通RMI SERVICE相比,就是有完整的事务支持,如果EJB采用CMT,则可以保证其方法是在全局的事务上下文中被执行的,但开启事务的成本太高,如果不需用到事务的方法需将事务关闭
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
5.自定义EJB容器
JBOSS是以拦截器的方式运行EJB的,如果EJB中不需要事务的支持,可将这个INTERCEPTOR注释掉
<interceptor-ref name="org.jboss.aspects.
tx.TxPropagationInterceptor"
/>
6.比较软的方式自定义EJB容器
将定义写在新的XML文件中,以覆盖原先的设定
<?xml version="1.0" encoding="UTF-8"?>
<aop xmlns="urn:jboss:aop-beans:1.0">
<domain name="Non Tx Stateless Bean" extends="Intercepted Bean"
inheritBindings
="false">
<bind pointcut="execution(public * *->*(..))">
<interceptor-ref name="org.jboss.ejb3.stateless.
StatelessInstanceInterceptor"
/>
<interceptor-ref name="org.jboss.ejb3.
AllowedOperationsInterceptor"
/>
<stack-ref name="EJBInterceptors"/>
</bind>
</domain>
</aop>

JMS
1.基本概念
JMS provider:JMS系统
Messages:客户端交流的载体
Connection factories:产生链接的工厂
Destinations:有Queues和Topics
Queues:含有一堆Messag的队列,只能发给一个客户端
Topics:可以发给多个客户端
JMS clients:生产和消费Message的东西
MDB:一个特殊的consumer
2.JMS架构
如果客户端和服务器端同一个JBOSS,则通过JCA作通讯,通过调整deploy/jca-jboss-beans.xml中的WorkManagerThreadPool的参数来调优,
如果不在一个JBOSS内,则通过远程框架进行通讯,通过调整deploy\messaging\remoting-bisocket-service.xml中的org.jboss.remoting.transport.Connector里的参数大小来调优
3.调优JBoss Messaging Connectionfactory
deploy\messaging\connection-factories-service.xml
4.调优JBoss Messaging destinations
在deploy/messaging中增加*–service.xml文件,从而增加MBEAN,来增加队列,再调整其参数
5.HornetQ
是JBOSS 6.0之后的JMS服务器,没有依赖于任何JBOSS包,可以嵌于任何程序中。
调优主要针对deploy/hornetq/hornetq-configuration.xml文件中的journal和transport参数
journal:journal-directory-存放message的地方,如果与其他文件夹共享,则会降低性能;journal-min-files:生成文件的个数,如果发现新文件建立的次数非常频繁,则考虑加大此数值来避免
6.JMS调优基本原则
减少message的大小;使用DUPS_OK_ACKNOWLEDGE;重用JMS资源,如connections, sessions, consumers, and producers;可以不持久化message的就不持久化。


持久层的调优

数据库设计调优
1.减少表所占的空间
这样IO读速度会加快,更少的内存;列的数据类型选少的;表设计要正规化(如果是报表类型的程序则非正规化的表速度要好)
2.数据库分割
如果某个表数据量太大,可将此表按某种逻辑分割成若干个小表,如按月份分成不同的表,不同月份的数据就放于不同的表中;
如果某个表中字段数太多,可将某些字段分组,不同的组建不同的表,如将BLOB类型的字段分割到新表中;
3.增加索引
对查询中用得比较锪WHERE字段做索引,索引数据是被抽出来,进行排序后单独存放的,如果不加索引,排序的动作只能在SQL被执行的时候做;
如果做了索引的字段被修改,则该字段的索引同样也要被修改,重新排序,这也会带来性能问题,因此一个表中最多只能放4-5个索引;
但如果这个表是只读的,则索引可以随意增加;
如果有组合索引,则UNIQUE的,值比较大的字段放在前面会比较好;
索引可以加在HIBERNATE的注释中

JDBC的调优
1. 使用链接池来链接数据库
数据链接的建立和关闭是一个非常昂贵的操作,能重用就重用,客户端从PreparedStatement Cache中取得对象,PreparedStatement再从链接池中取得链接,从而得以进行对数据库的操作
2.设置正确的fetch大小
如果设置了fetch大小为100,则JDBC会从数据库中取回100条记录,这样从ResultSet中读取next()是,是从内存中返回数据,超过了100再从数据库中取100以备用;
此数值一般设为当次查询总量的一半或1/4,但如果随便设高,性能反而下降;
JBOSS中设置全局大小:<connection-property name="defaultFetchSize">50</
connection-property>
3.INSERT和UPDATE使用批量操作
4.使用PreparedStatement而不使用Statement
PreparedStatement能避免SQL语句重复解释;使用PreparedStatement cache来缓存PreparedStatement对象
5.JDBC网络调优
<connection-property name="tcpSndBuf">65534</connection-property>
<connection-property name="tcpRcvBuf">65534</connection-property>
<connection-property name="tcpNoDelay">true</connection-property>


JPA/HIBERNATE调优
使用JDBC的限制:
由于是使用了原生的SQL语句,但不同的数据库SQL语句也是不同的,如果换数据库的时候SQL语句改动量大;
多表关联时,需维护JAVA OBJECT与数据表的对应关系;
加缓存时,工作量也比较大。
JPA与HIBERNATE的区别:JPA是JAVA的一个标准,HIBERNATE是JPA的一个实现
1.优化对象获取
HIBERNATE的N+1总量,如果有两个表是一对多的关系,查询父表的时候,子表的数据是不会被查出来的,直到调用查询子表的方法时子表的数据才被查出来,因此而多出一个SQL语句
使用LEFT OUTER JOIN来达到只用一个SQL语句就查出父表和子表的数据
Query q = entityManager.createQuery("from Customer c left outer join
fetch c.items order by c.id");

2.以分页的方式限制一次性获取数据的数量
q.setFirstResult(page*100).setMaxResults(100);

3.不能同时使用分页和FETCH的方式
HIBERNATE的分页,是首先取出所有的数据再在内存中分页,以避免不同数据库中分页语句的不同
4.使用BatchSize
@BatchSize(size = 50)
加载相关联的实体集合的个数,注意个数的对象是集合,不是集合里的单个元素
5.使用named queries作查询
这样会使用到PreparedStatement中的绑定参数
6.使用批量更新与插入
Session session =HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
for (int index = 0; index <1000;index++) {
Person person
= new Person();
book.setCountry(
"Usa");
book.setCity(
"NY");
person.setName(
"Inhabitant n." + index);
session.save(person);
// Flush every 50 records
if (index % 50== 0) {
session.flush();
session.clear();
}

}

session.getTransaction().commit();
session.close();

7.使用HIBERNATE CACHE
一级缓存,在SESSION关闭前都可以使用;
二级缓存,HIBERNATE使用第三方CACHE框架来做缓存
<property name="hibernate.cache.use_second_level_cache"
value
="true"/>
<property name="hibernate.cache.region.factory_class"
value
="org.hibernate.cache.jbc2.
JndiMultiplexedJBossCacheRegionFactory"
/>
<property name="hibernate.cache.region.jbc2.cachefactory"
value
="java:CacheManager"/>
<property name="hibernate.cache.region.jbc2.cfg.entity"
value
="mvcc-entity"/>
<property name="hibernate.cache.region.jbc2.cfg.collection"
value
="mvcc-entity"/>
启用缓存
@Entity
@Cache(usage
= CacheConcurrencyStrategy.TRANSACTIONAL, region =
"customers")
public class Customer implements Serializable {
}

查询缓存
<property name="hibernate.cache.use_query_cache" value="true"/>

启用查询缓存
@NamedQueries(
{
@NamedQuery(
name 
= "findCustomersByName",
query 
= "FROM Customer c WHERE c.name = :name",
hints 
= { @QueryHint(name = "org.hibernate.cacheable", value =
"true") }

)

使用缓存的策略:静态数据可以考虑,但查询和更新频率很高的、查询条件非常复杂的不建议用

posted @ 2012-05-25 18:17 paulwong 阅读(1216) | 评论 (0)编辑 收藏

IN ACTION系列原版书籍下载

http://www.wowebook.be/category/java/

http://www.wowebook.be/tag/ejb

http://www.wowebook.be/tag/cookbook

http://www.verycd.com/topics/2900746/

http://prefiles.com/1tiu8uvlvjvn/Packtpub.High.Availability.MySQL.Cookbook.Apr.2010.rar

http://prefiles.com/wxybvao8ofgy/Packtpub.Joomla.1.5.Top.Extensions.Cookbook.Oct.2010.rar

http://prefiles.com/t89nfm7kfn9h/Packtpub.Joomla.1.5.Cookbook.Oct.2010.rar

http://prefiles.com/32z90y8gzvln/Packtpub.Linux.Shell.Scripting.Cookbook.Jan.2011.rar

http://prefiles.com/7jjrzdgkrx23/Oreilly.MySQL.Cookbook.2nd.Edition.Nov.2006.rar

http://prefiles.com/5bwd939mcmwa/Packtpub.Android.3.0.Application.Development.Cookbook.Jul.2011.rar

http://prefiles.com/fyo2eodo2krm/Packtpub.Apache.Maven.3.Cookbook.Aug.2011.rar


http://prefiles.com/tcbaaaezwk63/Oreilly.Apache.Cookbook.2nd.Edition.Dec.2007.rar

http://prefiles.com/fi3r3b2cmeg3/Oreilly.HTML5.Cookbook.Nov.2011.rar

http://prefiles.com/ksvcwkl6gxnu/Addison.Wesley.HTML5.Developers.Cookbook.Dec.2011.rar

http://prefiles.com/rpiib56cv7i3/Wrox.Professional.Oracle.Weblogic.Server.Oct.2009.rar

http://prefiles.com/v8hlqhlfxz9i/Packtpub.Java.EE.6.with.GlassFish.3.Application.Server.Jul.2010.rar

http://prefiles.com/r15kwoscothw/Manning.POJOs.in.Action.Jan.2006.rar

posted @ 2012-05-22 23:23 paulwong 阅读(1212) | 评论 (0)编辑 收藏

Run Jetty Run - Eclipse插件

Introduction

Because Run-Jetty-Run(RJR) use full project classpath to run the web application, and we did some finetune job for maven by default.

So you could use RJR to run Maven web based web application WITHOUT ANY CONFIGURATION.

Simple click "Run Jetty" and then it works.

Forgot those configuration in pom.xml or WTP and save your time, use RJR to run it today.

For more details about how to run RJR, please referenced to GettingStarted and UserGuide .

Try it , you will love it. ;)


http://code.google.com/p/run-jetty-run/

posted @ 2012-05-22 10:44 paulwong 阅读(1420) | 评论 (0)编辑 收藏

仅列出标题
共116页: First 上一页 81 82 83 84 85 86 87 88 89 下一页 Last