2008-07-04

对于单例模式的一点想法

关键字: 单例 singleton
单例模式很普遍,对于Spring的实现机制不清楚,单就Java语言上的实现机制来讨论。 虽然简单,但要获得一个高性能且线程安全的单例确不简单。 最简单的、成熟的单例实现有如下两种: 1. public static final Singleton INSTANCE=new Singleton(); 即在声明静态变量时就实例化。这种方法的问题是,不能传入构造参数从而动态的创建实例。 2. public static synchronized Singleton getInstance(){...} 即在方法上同步。这种方法的问题是,始终有同步的开销(虽然对很多应用来说这开销并不大,以致不需要考虑 ...
以前也研究过Eclipse里Web Project引用Java Project的问题,没有解决,特地再深入研究了一下。 思路及实践如下: 1.Elcipse里Project Properties里有Project Reference的设置,说明有这个特性,Java Builder Path里也有引用的Projects设置。 试验:建立两个Java Project A、B,B引用A,设置B的Java Builder Path/Projects引用Project A,则B中的Class可以调用A中的Class,编译和运行都通过。 说明Eclipse对Java Project的解决方案良好。 (Pr ...
我对PreparedStatement和Statement的性能测试了一下:  测试代码如下: java 代码   Connection con = getOraConnection();   String sql = "select id,name from test where id=";   String tempSql;   ...
程序员很容易就会产生重写的冲动,因为推倒重来比维护一个现有系统要容易,至少是开始的时候。 但我会很谨慎。以前我们的头向总经理提出重写我们在做的那个CRM软件时,boss说的是,我并不反对你们重写,问题是你怎么能保证重写一定会更好,或者更值得? 而且,现有代码经过了多少人次的测试?如果重写这些东西就全丢了。 我会更喜欢重构,而且是阶段性的、甚至随时的,当然要保持重构的几个原则。 所以,我的代码很难会在一个时候实在难以忍受了,象一个生命体,始终有新陈代谢,当然就难以“腐化”了。 慎之。
我一直使用DBCP连接池,效果还不错。 最近因为朋友的一个J2EE应用一上连接池,很快就会报connection pool exhausted的错误,所以 特地研究了一下如何自动检测未关闭的数据库连接的技术。 研究了tomcat文档中DataSource一章,发现有专门的Preventing dB connection pool leaks一节, 设置数据源的removeAbandoned="true",removeAbandonedTimeout="60",logAbandoned="true"几个属性就可以了。 DBCP会自动把超过timeout时间仍未关闭的连接强制关闭,并且打出异常信 ...
权限概念中,我认为原子元素只有三种:用户、功能权限、数据权限。其他的角色、用户组之类的东西都是为了解耦用户与其他元素之间关系而引入的,或者为了方便起见,都是一个中间变量而已。 1.功能权限。 针对某个一功能,是否能访问。比如此用户是否能访问读取客户资料的功能。这个权限比较基础,不是yes就是no,所以有人又称Y/N权限。 2.数据权限。 在允许访问某一功能权限的基础上,控制可访问的数据范围。比如用户能访问读取客户资料的功能,但他只能访问本人录入的,或分配给本部门的客户资料。 我自己开发了一个权限管理系统,对于功能权限,是可配置的,这一点跟JAAS在web.xml配置是类似的;对于数据权限, ...
Oracle里可以使用多种语言来编写存储过程,比如Pro*C/C++,PL/SQL,COBOL,在Oracle8i开始支持用Java编写存储过程。 如果非要写存储过程的话,做为以Java谋生的我,首选用Java编写,用PL/SQL需要记忆很多的语法(Pascal类的语法)和函数,远不如使用Java/JDBC这么轻车熟路。而且,DB2等数据库都支持Java存储过程,所以不比为每一种数据学习一种编写存储过程的方法了。 Java存储过程与一般的JDBC程序有所不同的是: 1.有安全限制,毕竟是在oracle内部运行的,不允许访问操作系统的资源,如文件。 2.获取数据库联接方式,connectio ...
楼主总结得还不错。不过看上去似乎经验不足。(我说错了请原谅我) 我补充几点: 1.跨应用服务器。这个痛苦我比较有体会。(注意:但tomcat5到4之间的的跨越可能意义不大,因为支持的servlet ,jsp spec版本不同;倒过来是应该完全兼容的。) 1.1 EJB跨应用服务器。虽然有spec,但每家都有自己的扩展,有些特别要命特性比如,EJB spec2.0里居然对like 只支持常数,就是不能传入?。 然后EJB的配置文件都有各自的扩展,真是痛苦。好在Jbuilder可以自动转换Weblogic到Jboss,但也不是那么好,总有魔鬼的细节要你反复调试。 1.2无EJB的 ...
我对B/S是趋势和主流这个问题有过多年的疑问及困惑。 虽然我一直在做B/S的开发,我并不认为B/S相比C/S有什么特别大,不可超越的优势。C/S并不是死的,是可以变化和进步的。 本文中所提到的C/S,不仅是传统的两层结构,包括所有胖客户端+N层服务的结构。 其实两者之间的界限相当模糊,特别是在以Applet为主要界面,至Webstart(可以使用http 80端口自动下载、更新,并可在本地独立启动不需要浏览器),难以截然区分。 针对常见的几个问题我的思考如下: 1.B/S部署方便,不用安装,自动更新。 B/S天生的优势,但C/S并不是不能做到,天生的特性并不是不能改变 ...
2006-10-12

Re: 复杂商品分类的表如何建立?

关键字: 商品分类
zww80216 写道复杂商品的分类,类似淘宝的分类 1.每类商品有无限级分类 2.每个商品可能会有交叉分类 3.每类商品的扩展属性不一样 比如: 夹克的扩展属性为 款式: 拉链夹克 风格: 休闲 品牌: other/其它 适合季节: 春秋 尺码: M L 颜色: 其它颜色 质地: 纯棉 主板的扩展属性为 品牌: 微星/MSI 类型: Socket478 芯片组: Intel 845 平台类型: Intel平台 宝贝成色: 8成新 这些扩展属性都会动态的变化 那么问题来了: 1.全文搜索如何合理建立? 2.可能后台扩展属性表是否需要动态建立? 3.如果单件商品属于交叉分类的话,查询结果记 ...
ylt 写道 我同意Readonly的观点。如果不用hql,想实现数据库兼容就太难了。 举个例子,在很多手工录入的表格中都要记录录入时间/操作人/备注,我在java中使用date/person/comment来表示,可是java的关键字和sql的是不一样的,不同数据库也有各自的扩展关键字,上面那几个字段很可能就是某种数据库的关键字。用hql,我所有的查询语句就可以保持统一,切换数据库只需要修改mapping。实际上我写了一个自动根据数据库关键字修改mapping的类,这样连mapping文件也只需要一个。 实现数据库兼容并不象你想象的那么难。:) 我做的平台软件在多种数据库上测试过,包括: ...
2006-09-18

缺陷管理系统ClearBug发布

关键字: bugTracking
看看网上流行的各种缺陷管理系统,总是觉得有所缺憾。 BugZilla看上去还不错,但安装各种Perl的插件就让人心生畏惧。 国内也有PHP做的,流程比较固定。 ClearQuest固然强大,但即使让我用D版的,也得费不少功夫自定义流程和表单。 综合多方面的研究,于是自行写了一个缺陷管理、跟踪系统--Clearbug. 特色是流程比较灵活。提供三种预定义的流程: 1)小团队自由流程。分待解决/测试者验证/已挂起/已关闭等状态。 特点是流程的下一个处理者可以提交时指定,不用项目经理必须参与,比较灵活。 2)小团队受控流程。状态同上。 特点是流程的下一处理者的角色是在流程中预定义的。由于 ...
2006-09-18

开源琴棋报表1.3.3发布

关键字: 报表
轻量级。功能简明,易于使用,适用与中小型应用。 特别针对中国式报表的特点进行设计,是更适合中国用户的报表工具。支持分组汇总,交叉报表等。 易于扩展。可以自行实现系统定义的接口,而扩展功能。可以扩展比如汇总算法、 数据格式化显示等功能。 可以输出多种格式,包括HTML、PDF、EXCEL、CSV。其中PDF和EXCEL格式以良好的打印效果解决了报表的打印问题。 欢迎访问www.lucas-lee.com 欢迎大家多提宝贵意见!
Servlet是在多线程环境下的。即可能有多个请求发给一个servelt实例,每个请求是一个线程。 struts下的action也类似,同样在多线程环境下。可以参考struts user guide: http://struts.apache.org/struts-action/userGuide/building_controller.html 中的Action Class Design Guidelines一节: Write code for a multi-threaded environment - Our controller servlet creates only one in ...
MySQL5支持视图、存储过程、触发器等高级特性了,终于象个完整的数据库了! 很高兴啊,我们做项目的时候选择性更强了。 不过在我一个实际的网站项目中,发现事实和看上去的不太相同啊。是否支持这些特性和支持得多好毕竟是不同的问题!比如在使用Oracle时,发现在9i上能正确执行的统计SQL到8i上居然报错,无非是多用了几个嵌套的子查询。Oracle尚且如此,MySQL也的确不能有太高期望。 下面列举一下MySQL5的问题: 版本5.0.16中对视图进行排序时,会导致服务器崩溃。如:select * from 视图名 order by 某字段。所幸5.0.21版本解决了这个问题。不过我这只是 ...
我想了解一下软件开发中的编程方法的历史,以及现在流行的方法的来龙去脉,但是没有找到相关的总结性的文章,于是自行总结了一下,不当之处,请大家批评指正。 1.各种方法概述 1)结构化编程 程序应该按自上而下的顺序执行,不会做随便跳转。主要为了提高可读性(特别是控制结构的),可自上而下的阅读代码,并且执行的顺序也大体是这样的。 它的三个组成部分:顺序Sequence,选择selection,循环(或迭代)repetition (or iteration)。任何控制结构都可以用这三个部分组成。 需要小心使用其他方式如:break,continue,return,throw ...
所谓字典就是数据库应用中被其他表(通常加以外键约束)引用的表,如客户表引用客户类型,那么客户类型即为字典表。删除字典数据要考虑是否已被其他数据引用,一般不允许做级联删除。 这个问题想必大家都碰到过,但各有各的 做法。本人与若干同事讨论过,将各种做法总结一下。 物理删除,即用delete SQL删除。如果字典数据被引用,则会抛出违反外键约束的异常,将其封装为可读的信息提示给用户。JDBC中的异常类为SQLException,如何判断是违反外键约束的异常呢?有方法如下: 利用SQLException中的errorCode,这是数据库特有的错误编码。 利用SQLException中的SQLS ...
Lucas Lee
搜索本博客
最近加入圈子
存档
最新评论