使用spring aspect ltw和tomcat进行web开发的aspect加载问题

使用spring aspect ltw与tomcat整合开发时,需要ltw一般有两种方法。一种是通过aspectj本身的classload机制,在tomcat启动脚本中,加载相应的java agent数据信息;另一种就是通过修改上下文的classLoader,而使用spring提供的tomcatInstrmentClassLoader来进行aspect的编织工作。
然而,在笔者的开发环境中,却发生了aspect无法被再次编织的问题。经过反复的检查,确认了是由于classLoader加载类的先后顺序以及spring对instrment的注入顺序发生了混乱,而导致aspect类并没有正确的被编织。

    使用spring aspect ltw与tomcat整合开发时,需要ltw一般有两种方法。一种是通过aspectj本身的classload机制,在tomcat启动脚本中,加载相应的java agent数据信息;另一种就是通过修改上下文的classLoader,而使用spring提供的tomcatInstrmentClassLoader来进行aspect的编织工作。
    然而,在笔者的开发环境中,却发生了aspect无法被再次编织的问题。经过反复的检查,确认了是由于classLoader加载类的先后顺序以及spring对instrment的注入顺序发生了混乱,而导致aspect类并没有正确的被编织。

继续阅读“使用spring aspect ltw和tomcat进行web开发的aspect加载问题”

使用普通java开发编译注解版的aspectj程序

使用java5语法(annotation)版的aspectj进行ltw化的aspect开发。在进行运行配置时,必须保证相应的aspect也同样在weaver中,以进行再次编织。

     平时使用aspect开发程序时,一般都是使用普通的aspect语法,然后通过使用ajc进行编译之后,再在命令行下面运行。这样,对于使用ide工具进行java程序开发的人员来说非常麻烦。自aspectj支持java5语法之后,就不再直接使用普通的aspect语法了,而是直接使用Aspectj Annotation语法,然后通过ltw来直接运行aspectj程序。
    本文主要讲解如何使用aspectj的ltw功能进行程序开发,以及对于其中一个在javac环境下的特殊配置文件处理。

继续阅读“使用普通java开发编译注解版的aspectj程序”

使用embeded tomcat进行嵌入式javaee开发-程序更新

     一般情况下,在进行客户程序的更新时,通常是由维护人员手动将更新程序(或整个项目程序),重新copy至客户的服务器上,并重新启动相应的web容器来达到程序更新的目的。不过,这样有一个缺点,就是每次更新时,必须需要维护人员在现场进行。对于,客户离公司远,并且更新又频繁(比如,小修小改)时,这种情况就得不偿失了。所以,能够有一个自动更新的程序,在指定的时间将程序进行更新,并且重新启动相应的web服务器,这样就最好了。
    本文通过使用svnkit来进行程序的更新,描述了基本的svn使用,以及一个简单的更新流程。

继续阅读“使用embeded tomcat进行嵌入式javaee开发-程序更新”

在java web项目中慎用Executors以及非守护线程

     最近研究embeded tomcat,特别是关于tomcat启动和关闭的模块。通过查看相应的源代码, 我们知道tomcat的关闭是通过往相应的关闭端口发送指定的关闭指令来达到关闭tomcat的目的。但是有的时候,通过shutdown.bat或shutdown.sh却不能有效地关闭tomcat,网上也有很多人提出这个问题。通过相关资料,最后问题出现线程上。

继续阅读“在java web项目中慎用Executors以及非守护线程”

使用embeded tomcat进行嵌入式javaee开发-启动tomcat

     昨天在网上研究了下关于将tomcat嵌入到主程序中进行运行,而不是像以前将一个web项目copy到tomcat中进行运行。之所以这样做的原因,即是因为项目部署到客户方,在进行更新的时候,需要手动地进行更新,再把相应代码copy到tomcat,然后再运行。运用embeded tomcat就可以将项目与tomcat分开,在进行更新时,先使用自定义的程序进行自动化更新,待更新完毕之后,再启动tomcat(或其它javaee容器)进行项目运行。

继续阅读“使用embeded tomcat进行嵌入式javaee开发-启动tomcat”