paulwong

#

Linux SHELL环境初始化顺序总结

以ubuntu server 11.10 为例,

1) 当服务器启动时,SHELL环境的初始化过程如下:

/etc/environment –> /etc/default/ 中的配置脚本

2)当一个用户登录SHELL的时候

/etc/profile --> $HOME/.profile

如果是BASH SHELL , 则是

/etc/profile –> /etc/bash.bashrc --> $HOME/.profile --> $HOME/.bashrc

3) 如果一个用户打开一个BASH SHELL 或 使用su 切换用户身份时, 则

/etc/bash.bashrc –> $HOME/.bashrc

其中:

/etc/environment 设置全局环境变量, 重启服务器生效

/etc/default/目录中的配置脚本 设置特定的全局环境变量

/etc/profile 当用户重新登录时,该文件被执行. 并依次调用/etc/profile.d目录中的所有脚本。如果是初始化BASH SHELL , 还会调用/etc/bash.bashrc

/etc/bash.bashrc 每次启动一个BASH SHELL时都会执行该脚本

$HOME/.profile 作用等同/etc/profile

$HOME/.bashrc 作用等同/etc/bash.bashrc

$HOME/.bash_logout 当每次退出SHELL环境时被执行

posted @ 2012-02-08 13:00 paulwong 阅读(635) | 评论 (0)编辑 收藏

JENKINS使用步骤

从代码仓库获取代码用SVN,做单元测试用JUNIT,做代码检查用PMD、FINDBUGS,代码编译、打包用ANT,拷贝文件到部署服务器上用SHELL,出现BUG了通知开发人员要发EMAIL,工具一多了,整合起来用时,不断切换界面,输入命令的复杂性可想而知,有没有一站式的工具可以代劳呢?

有,这就是JENKINS,有了她,你就可以:通过统一的WEB界面做各种配置工作、查看工具的LOG输出、即使是历史的日志查看也没问题;通知配置排程,可以自动的获取代码、编译、打包和部署,发邮件,无须人工干预。
  1. 安装JENKINS,其实就是把一个WAR包放到容器中
  2. 安装插件:发邮件插件Jenkins Email Extension Plugin和部署插件Deploy to container Plugin
  3. 配置JDK和邮件服务器地址
  4. 新建任务:配置SVN地址/配置构建排程@hourly/配置构建步骤,如先用ANT编译打包再传到服务器/配置成功或失败后发邮件通知的地址
  5. 手动执行任务或等待时间到了后执行任务
各种插件的安装
  1. ANT:如果在JENKINS中使用了ANT-JUNIT,由于JENKINS是直接调用操作系统的ANT命令的,所以要在LINUX下安装ANT,配置ANT_HOME,并将BIN加入到PATH中:
    ANT_HOME=/opt/ant/apache-ant-1.8.2
    JAVA_HOME
    =/usr/java/jdk1.6.0_29
    JRE_HOME
    =/usr/java/jdk1.6.0_29/jre
    PATH
    =$ANT_HOME/bin:$JAVA_HOME/bin:JRE_HOME/bin:$PATH 
    CLASSPATH
    =.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    export ANT_HOME JAVA_HOME JRE_HOME PATH CLASSPATH

http://hanqunfeng.iteye.com/category/138233

posted @ 2012-01-31 18:19 paulwong 阅读(8742) | 评论 (0)编辑 收藏

JAAS安全术语

在JAAS的体系中,有些安全的术语,不深入了解,会弄得一头雾水,现作一小结:
  1. Subject:相当于普通系统中的“当前用户” ,可以从这里取得角色之类的信息,里面还含有一个MANAGER类,可以查数据库,如subject.login(...)就是查数据库是否匹配密码
  2. Principal:相当于用户名信息
  3. Credential:相当于密码或密钥等信息
  4. Realm:加在DAO层外面的一个ADAPTER,统一调用数据库的方法名
  5. SecurityManager:权限服务的统一入口,里面会调用Realm

posted @ 2012-01-30 23:20 paulwong 阅读(405) | 评论 (0)编辑 收藏

使用Eclipse构建Maven的SpringMVC项目

http://limingnihao.iteye.com/blog/830409

posted @ 2012-01-29 23:27 paulwong 阅读(2341) | 评论 (0)编辑 收藏

安全认证框架-Apache Shiro研究心得

     摘要: 最近因为项目需要,研究了一下Apache Shiro安全认证框架,把心得记录下来。(原创by:西风吹雨) Apache Shrio是一个安全认证框架,和Spring Security相比,在于他使用了和比较简洁易懂的认证和授权方式。其提供的native-session(即把用户认证后的授权信息保存在其自身提供Session中)机制,这样就可以和HttpSession、EJB Session Bea...  阅读全文

posted @ 2012-01-28 16:07 paulwong 阅读(18941) | 评论 (0)编辑 收藏

Oracle Coherence 概述

  Coherence是什么

  Coherence是Oracle为了建立一种高可靠和高扩展集群计算的一个关键部件,集群指的是多于一个应用服务器参与到运算里。Coherence的主要用途是共享一个应用的对象(主要是java对象,比如Web应用的一个会话java对象)和数据(比如数据库数据,通过OR-MAPPING后成为Java对象)。

  简单来说,就是当一个应用把它的对象或数据托管给Coherence管理的时候,该对象或数据就能够在整个集群环境(多个应用服务器节点)共享,应用程序可以非常简单地调用get方法取得该对象,并且由于Coherence本身的冗余机制使得任何一个应用服务器节点的失败都不会影响到该对象的丢失。其实如果不使用coherence,对于一个会话在多个应用服务器节点的共享一般是通过应用服务器本身的集群技术,而Coherence的创造者则认为基于某种应用服务器技术的集群技术来共享会话变量的技术并不完整,而专门开发出Coherence这个产品(原来称为tangosol)并且最后被Oracle收购,这个产品既有原来各种应用服务器集群所具有的各种技术特点,而且又增加了原来各种应用服务器集群技术所没有的各种特性。

  要学习这个产品,需要记住并注意的一点是:Coherence所有的设计都是基于多个(可以是非常多)的JVM,很多Coherence的测试都是使用几十甚至上百个节点来进行的。

  Coherence的一些技术特点

  Coherence产品首先是被设计用于高扩展性:

  所谓高扩展性就是当一个应用服务器能够处理2000笔交易,则10个应用服务器应该能够处理20000笔交易。

  一般而言,整个应用架构的扩展性由架构里的最不能扩展的部位(称之为瓶颈)决定,这个瓶颈一般而言都是数据源的处理,Coherence针对这种理解提供了应用层的数据共享缓冲,任何一个时候如果应用能够从这个数据缓冲里满足要求,则不会将请求发给数据源,从而极大地增强一般的瓶颈(数据)的扩展性。

  为了加强数据的写处理性能,Coherence还设计了延迟写的功能,就是应用的写会先缓存在Coherence的缓冲区,然后延迟写到数据库里,为了减轻数据源的写压力,Coherence只把最近的更改写到数据源,比如一条数据被更改了多遍,则只有最后的更改会被提交到数据源。而且,如果可能,多个SQL语句会被变成一个SQL语句批,一次提交给数据源,这样又极大地降低了对数据源的压力。

  熟悉于数据库应用程序,参加过性能测试的有经验的朋友应该知道这非常多的场合,上述Coherence的特点刚好是对应了非常多的经常遇到的应用出现问题的场景。

  即Coherence被放在应用服务器和数据库服务器之间,从而解决通常应用架构里的瓶颈(数据瓶颈)来提高整个应用架构的可扩展性。

  Coherence的第二个非常重要的特地是支持数据的分区处理,就是如果有N个处理节点,则每个节点只管理1/N的数据,当一个节点失效时,该节点的数据会在剩下的节点均分,每个节点将管理1/(N-1)的数据。同样的,当一个节点增加进来时,则每一个节点都会分配一部分数据给新的节点,则最终每个节点只管理1/(N+1)的数据。大家知道,一般应用服务器的集群都有只能缓冲共享2G java对象的缺点,而Coherence这种设计让Coherence能够处理非常多的数据,只需要通过增加节点的数量,就可以处理更多的数据。

  如果安装了Coherence,则应用服务器不需要配置专有的服务器集群技术,因为Coherence*web模块提供了可用于处理http会话信息在Coherence集群内共享的功能,当一个节点需要读取HTTP会话信息而发现自己没有该会话信息的时候,它会把请求同时发给所有的节点(multicast),而当一个节点需要写HTTP会话信息的同时,它也会把写请求发给所有的节点,所以2个节点的处理和100个节点的处理都是一样的。

  1. Caching:正如Coherence的别名是Data Grid,Coherence在这种场景主要是被用于缓存数据源的数据,当应用需要数据时,直接从Coherence里面取得而不是从后台数据源取得。比如用于缓存用户的个人设置信息。这种使用方式可以极大降低对后台数据源的压力,并且甚至当后台数据源不可用的时候也不影响系统的可用性。

  2. Analytics:用于查询,从简单查询到复杂查询,比如用于查询金融交易系统的投资者持仓信息(非常密集的查询)。这种使用方式还可以使用多个节点的并发查询。

  3. Transactions:在Coherence直接处理交易,可以在Coherence直接提交交易,从而得到极快的响应速度和高可扩展性。

  4. Events:Coherence里可以使用事件驱动的架构,能够对事件做出实时的处理。比如在线游戏使用EDA架构处理“武器”,“装备”的买卖交易。

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

让Apache Shiro保护你的应用

     摘要: 什么是Apache Shiro?Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。 Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:...  阅读全文

posted @ 2012-01-27 20:18 paulwong 阅读(885) | 评论 (1)编辑 收藏

优化程序之前,可用Jamon来监测你的Spring应用

/**
*作者:张荣华(ahuaxuan)
*2007-8-15
*转载请注明出处及作者
*/

前两天在看Spring内置的拦截器的时候,发现了一个之前没有注意的类:org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor,好奇心促使我上网查了一下这个jamon。大概看了一下之后发现这个玩意还真挺好用的而且挺重要的,而且现在国内对它的介绍也很少,所以写了一篇文章和大家分享。

一,Jamon简介:
Jamon的全名是:Java Application Monitor。它是一个小巧的,免费的,高性能的,线程安全的性能监测工具。它可以用来测定系统的性能瓶颈,也可以用来监视用户和应用程序之间的交互情况。 Jamon主要是用来检测jee的应用程序。它最新的版本是2.1,可以用在1.4以上的jdk上。

二,将jamon导入到你的应用程序中去
首先下载jamon的开发包,见我的附件,同时你也可以去Sourceforge上自己下载。Sourceforge的下载地址为http://jamonapi.sourceforge.net。解压之后可以得到一个jar包和一个war包。jar包是自己会用到的,而war包是一个例子(不要小看这个例子,待会也要把它导入到项目中)。把war包之间丢到服务器上,访问:localhost:8080/jamon就可以看到这个例子了,这个例子是一个简单的性能监控系统。

接着把例子中的所有的包都导入到项目中,并把war包中的jsp和images还有css都考到项目中,比如新建一个目录叫monitor(它和WEB-INF是同级目录)。

三,正确配置自己的应用
我们在性能监测的时候最监测的就是页面的访问率和类中方法的访问率。所以在这一部分主要讲解一下如何监测自己的页面和类中方法的访问。

1, 检测自己的页面访问率
首先我们需要在web.xml中添加一个filter,这个filter就是用来判断哪些页面需要被监视的,如下所示:
<filter>
        
<filter-name>JAMonFilter</filter-name>
        
<filter-class>com.easywebwork.filter.EasyPageMonFilter</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>JAMonFilter</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>

接下来我们看看这个filter的写法:

/**
*
@author 张荣华(ahuaxuan)
*
*
@since 2007-8-13
*/

public class PageMonFilter extends JAMonFilter{

private static final long serialVersionUID = 5746197114960908454L;

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
Monitor allPages
= MonitorFactory.start(new MonKeyImp("org.easywebwork.allPages",getURI(request),"ms."));
//这里就是我们要监视的所有的页面的配置
Monitor monitor = MonitorFactory.start(getURI(request));
//这里就是我们要监视的某个页面的配置
try {
filterChain.doFilter(request, response);
}
finally {
monitor.stop();
allPages.stop();
}

}


protected String getURI(ServletRequest request) {
if (request instanceof HttpServletRequest) {
return ((HttpServletRequest) request).getRequestURI();
}
else {
return "Not an HttpServletRequest";
}

}


private FilterConfig filterConfig = null;

}
}

这个类看上去很简单,其实也挺简单的,就是得到uri,然后把它注册到MonitorFactory类中。这样只要我们去访问刚才创建的monitor目录下的jsp就可以看到性能监测页面了。

2, 接下来我们看看在使用spring的情况下如何监测一个bean的方法调用。
Spring也提供了对Jamon的支持(spring支持的东西还真多啊),也就是文章开头提出的那个拦截器,为了给我们的bean加上拦截器,我们在spring的applicationcontext配置文件中加入如下语句:

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>userService</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>jamonInterceptor</value>
</list>
</property>
</bean>

<bean id="jamonInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor">
</bean>

上面这个是典型的spring的aop的配置,如果对spring的aop配置不了解的可以去看一下spring中文文档,当然如果不想了解的话即使直接把这段配置拷到自己的项目中也是可以直接使用的。

还有一个步骤就是在你的log4j.properties中加入这句代码:

log4j.logger.org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor = TRACE


如果没有这一行,那么这个拦截器是不会把方法调用的信息向MonitorFactory注册的。

只需要这些步骤,userservice中的方法在调用的时候就可以被拦截,然后将其注册到MonitorFactory中去了。

所有的配置完成之后我们来看一下效果吧:
http://www.iteye.com/topics/download/b2bac96e-6c18-4340-b7e0-f84c7bb6adca从这个图上我们可以看到,所有页面被访问的次数,UserService中的getAllUsers被调用的次数,最右边的是访问时间。这只是整个图的一部分,当然这个页面中也包括每一个页面被访问的次数和第一次访问的时间等等。下载附件运行,就可以看到所有的页面了。

三,总结
根据以上的步骤,我们就可以监测我们的程序了,应用程序中哪些页面被访问的多,哪些页面被访问的少,哪些方法被访问的多,哪些方法被访问的少,以及访问高峰期集中在什么时间等等,有了这些参数,我们更可以有针对性的对应用程序进行优化了,比如说某个页面访问比较频繁,我就可以用ehcache或oscache给这个页面做一个缓存。如果某个方法的访问比较频繁那就看看这个方法能否进一步优化,是需要异步,还是需要缓存,还是需要其他等等,总之有了jamon可以给我们带来更多的便捷,既可以让我们知道我们的客户的行为,也可以让我们知道我们开发的程序的“能力”。

其实本文提供的只是对页面和方法调用的监控,但是jamon可以提供更多功能,比如说sql语句的监控等等,这就需要我们共同去发掘了。

附件中包括了一个easywebwork的例子,我把jamon导入到这个例子工程中去,大家可以直接下载运行观看效果。Easywebwork是一个旨在减少webwork2.2.x系列的xml配置文件的项目。

  • JamonSample.rar (3.7 MB)
  • 描述: 由于上传文件大小有限制,所以需要同学们自己添加一下jar包: spring,common-logging,log4j,common-collections activation, common-lang

     

  • lib.rar (3.3 MB)
  • 描述: 第二组包包括 spring,common-logging,log4j,common-collections activation, common-lang

     

  • posted @ 2012-01-25 16:32 paulwong 阅读(754) | 评论 (0)编辑 收藏

    memcache-client-forjava

    http://code.google.com/p/memcache-client-forjava/
    http://marc.iteye.com/blog/28700
    http://www.jayxu.com/2010/06/09/2342/
    http://www.iteye.com/topic/128458
    http://code.google.com/p/xmemcached/wiki/User_Guide_zh

    posted @ 2012-01-24 20:34 paulwong 阅读(400) | 评论 (0)编辑 收藏

    EhCache 缓存系统简介

         摘要: EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 下图是 EhCache 在应用程序中的位置: EhCache 的主要特性有: 1. 快速.2. 简单.3. 多种缓存策略4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题5. 缓存数据会在虚拟机重启的过程中写入磁盘6. 可以通过RMI、可插入API...  阅读全文

    posted @ 2012-01-24 20:32 paulwong 阅读(1440) | 评论 (0)编辑 收藏

    仅列出标题
    共115页: First 上一页 89 90 91 92 93 94 95 96 97 下一页 Last