Java

按领域来分团队比按照功能来分团队更好

今天开会受启发想到了一点:互联网按领域来分团队比按照网站功能来分团队会更利于各个软件artifact的长期健康。 比如{订单小组,权限小组}这种分法比{前台系统,后台系统}这种分法更好。后一种分法中,大家都可以改订单模块,订单模块自己没有专门的责任人,可能会导致订单模块被改的乱七八糟,也没什么长期规划。

如何做出一个OutOfMemoryError并使它产生dump文件?

注:这篇文章只是一个手册,用来供你做实验时照抄。没有任何原理性的东西,没有干货。 如何做出一个OutOfMemoryError并获取dump文件? 第一步: 设置jvm参数    -XX:+HeapDumpOnOutOfMemoryError   -XX:HeapDumpPath=/home/kent/temp/jvm-oom.prof 第二步:使代码产生jvm异常   1. 经验表明,显式地throw new OutOfMemoryError()不会产生dump文件   2. 简单的做法:通过String的串接 String s = "abc"; while(true) s += s;   3. 因String导致OOM的情况在实际上并不常发生。可以用自定义对象搞出OOM,然后用visual vm打开dump文件,以加深感性认识: public static void main(String[] args) { List<ScapeGoat> goats = new ArrayList<ScapeGoat>(); goats.add(new ScapeGoat()); // 让ScopeGoat对象数呈指数级增长(2的n次方) while (true) { int goatsNum = goats.size(); for (int i = 0; …

如何做出一个OutOfMemoryError并使它产生dump文件? Read More »

选择Maven的最初动机是什么?

Maven能干很多事情,但你当时选择它或者去了解它,是因为什么目的? 今天问自己这个问题,居然一时间答不上来,能想到的只是一些“依赖管理”、“构建管理”之类的泛泛的说法。 后来回忆了一些,想起来了。当时真应该坚持使用Maven。 当时的想法是:   1. 组织内有好几个应用   2. 应用之间需要共享一些业务逻辑组件,即jar库   3. jar库需要频繁经常构建和版本升级,这些事情手动做很麻烦,所以当时考虑引入Maven;当时脑子里还没建立起版本号的概念,以为这是第三方框架才用的东西,如果当时仔细研究了Maven,还可以顺便建立起版本的概念,为未来的服务化铺平道路。

发布了一个用于在页面上查看日志的小工具:玻璃墙(Glasswall)

开发和测试时, 你想不想在浏览器的页面上直接看到本次http请求所产生的log4j日志? 开源项目“ 玻璃墙”(Glasswall)就是这样一种工具。它让你在页面上直接看到日志输出,帮你在遇到问题时迅速地发现问题,而不用辛苦地去服务器上找日志然后grep。如图: Glasswall的功能很简单,但它有个 在易用性方面有个优势:“非侵入”。使用Glasswall,   1. 你用不着做任何代码、配置文件的改动,也不用把任何jar文件丢到web应用里或应用服务器里。   2. 你只需要在启动应用服务器的命令行里加上"-javaagent"参数   3. 或者连这个参数都可以不加;你可以在web应用启动后,另外敲一个命令:“./glasswall.sh <pid> ”(windows下是glasswall.bat)。 Glasswall的应用场合是所有基于Servlet的web application,目前支持的日志框架除了log4j,还有java.util.logging。 使用者的jdk版本须在java 5以上; 如果想使用零侵入的“./glasswall.sh <pid> ” ,则须java 6以上的SUN JDK。 另外,操作系统不限。 更多细节详见 http://code.google.com/p/glasswall/的首页介绍,也可到作者的微博留言: http://weibo.com/u/2474145202 有兴趣的同学可以下载下来试试。 另外,虽然我自认为做了很全面的测试,但可能仍有缺陷。 欢迎大家在使用时检视代码,提交补丁,或者加入项目。 声明:     1. 这个主意不是本人原创。类似的东西已经存在,本人只是写了一个非侵入式的版本     2. 这个项目的构思和设计都深受开源项目BTrace的影响,有兴趣的同学可以研究下Btrace

com.sun.tools.attach.AttachNotSupportedException: no providers installed

如果你看到了这个异常: com.sun.tools.attach.AttachNotSupportedException: no providers installed, 十之八九是因为下面中的一个:   1. 你没有使用sun jdk   2. 你使用了sun jdk,并且JAVA_HOME指向了这个jdk,但是你的path下的"java"命令不是这个jdk里面的java,而是操作系统给你默认安装的jre下的,如c:\Program Files\java\….

认识了一个新朋友:JBoss Tattletale

它可以帮你解决以下问题:    1. You are faced with a lot of Java archives and you don’t know how they relate   2. You need to know in which archive(s) a class is located or if it is missing from the class-path   3.You need quick access to version identifiers and the OSGi status 比如说,要检查某个类是否存在于WEB-INF/lib下的多个jar文件中,就可以这个工具。 Tattletale可作为独立的命令行工具使用,也可以用作Maven插件。它还计划与Hudson集成。

[Maven]如果改变了所依赖工程的版本,则本工程的版本也应该修改

如果改变了所依赖工程的版本(修改本工程的pom.xml),则本工程的版本也应该修改; 因为   1.本工程已不是以前的那个工程了,应该有个新名字,即新的版本号   2.设本工程为B,它依赖了C,同时又被A依赖。原来B依赖C-1,现在依赖C-2。如果B的版本不改,则A在打包时就不会更新B及其依赖了的C,导致A仍然依赖C-1。 C的升级就不会让A受益