君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理
  1052 Posts :: 386 Stories :: 138 Comments :: 0 Trackbacks

随笔分类 - java

摘要:第一部分析了BEA提供的Java/COM互操作解决方案—jCOM的实现原理;本文是第二部分,比较全面地分析了Weblogic Server的jCOM实现技术之后,通过一个具体实例来说明了jCOM的具体使用过程。WebLogic Server 8.1的发行包中带有大量参考示例,其中有专门供jCOM使用... 阅读全文
posted @ 2014-05-08 02:06 刺猬的温驯 阅读 (248) | 评论 (0) 编辑

摘要:本文将重点讨论BEA的Java/COM解决方案,是全文的第一部分,细致分析BEA提供的Java/COM互操作解决方案—jCOM的实现原理。一、jCOM简介据Gartner的研究分析,在名列全球前1000名的企业中,大约90%都混合应用了Java和Windows技术。然而,Java技术和微软技术分别提... 阅读全文
posted @ 2014-05-08 02:04 刺猬的温驯 阅读 (183) | 评论 (0) 编辑

摘要:1、用户自定义的类加载器:要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名字,返回对应的Class对象的引用。findClassprotected Class<?> findClass(String name) throws ClassNotFoundException使用指定的二进制名称查找类。此方法应该被类加载器的实现重写,该实现按照委托模型来加载类。在通过父类加载器检查所请求的类后,此方法将被 loadClass 方法调用。... 阅读全文
posted @ 2013-04-02 01:59 刺猬的温驯 阅读 (9206) | 评论 (2) 编辑

摘要:简介:jspf(JavaSimplePluginFramework)是一个插件框架,用于减少小型项目的的开发时间,增加代码的可维护性。他完全隐藏了组件的详细实现,只用到他们的接口。加载组件所需要的代码也很少,便于编写。jspf框架完全基于java注释实现@PluginImplementation,@InjectPlugin,@PluginLoaded,@Timer和@Thread等.(关于java注释:元数据从metadata一词译来,就是“关于数据的数据”的意思。越来越的开源框架都提供了“元数据”支持,其实也就是注释支持。Annotation是从java5开始在语言级别提供的一项新特性,An 阅读全文
posted @ 2013-04-01 23:15 刺猬的温驯 阅读 (834) | 评论 (0) 编辑

摘要:简介:任何企业应用程序都需要处理时间问题。应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径。使用 JDK 完成这项任务将非常痛苦和繁琐。现在来看看 Joda Time,一个面向 Java™ 平台的易于使用的开源时间/日期库。正如您在本文中了解的那样,Joda-Time 轻松化解了处理日期和时间的痛苦和繁琐。在编写企业应用程序时,我常常需要处理日期。并且在我的最新项目中 — 保险行业 — 纠正日期计算尤其重要。使用java.util.Calendar让我有些不安。如果您也曾使用这个类处理过日期/时间值,那么您就知道它使用起来有多麻烦。因此当我接触到 Joda- 阅读全文
posted @ 2013-02-28 18:03 刺猬的温驯 阅读 (173) | 评论 (0) 编辑

摘要:天地连站群可以根据用户输入的初始关键词,获取该关键词搜索引擎的搜索结果,然后逐条获取这些相关文章的内容。这样就需要面对无数网页的各种编码。为了解决这个问题,引入了下面的解决办法:在引入编码自动识别前,我们有两种途径获取网页的编码信息:其一、通过服务器返回的header里的charset变量获取其二、通过页面里的meta 信息获取正常情况下,如果服务器或者页面有提供这两个参数,而且参数是正确的,那我们抓取网页时就不存在编码的问题了。但是现实总是会难为我们这些程序员,抓取网页时,经常会出现以下几种情况:1.这两个参数缺失了2.这两个参数虽然都提供了,但是不一致3.这两个参数提供了,但是与网页实际的 阅读全文
posted @ 2012-11-19 22:17 刺猬的温驯 阅读 (940) | 评论 (1) 编辑

摘要:CDO的全称为Common Data Object 是公用数据结构的意思,这是抽象的一种新型的数据结构,可以设置基本的数据类型,比如:byte、short、int、long、float、double、String,也可以存储这些类型的数组,同样,CDO里可以嵌套新的CDO或者CDO数组,这种数据结构几乎是万能的数据结构,它可以很方便的转化为XML表示,也可以很方便的转化为Json的表示,同样XML或者Json也可以很方便的转化为CDO对象,设想有如下的代码:01CDO cdo1=newCDO();02cdo1.setIntegerValue("classid",1);03c 阅读全文
posted @ 2012-11-01 23:40 刺猬的温驯 阅读 (670) | 评论 (0) 编辑

摘要:CDO中存储的数据类型用如下的接口常量定义:01packagecom.cdoframework.cdolib.base;0203importjava.io.Serializable;04importjava.text.SimpleDateFormat;050607publicinterfaceDataTypeextendsSerializable08{091011intNONE_TYPE =0;1213intBOOLEAN_TYPE =1;14intBYTE_TYPE =2;15intSHORT_TYPE =3;16intINTEGER_TYPE =4;17intLONG_TYPE =5;18 阅读全文
posted @ 2012-11-01 23:36 刺猬的温驯 阅读 (235) | 评论 (0) 编辑

摘要:今天看NFS-RPC的源码,看到有这样的代码:Collections.unmodifiableList(servers);突然想起来自己之前看重构时的一种叫Encapsulate Collection的思想,今天以代码为主线再来回顾下:1publicclassCompany {23privateString companyName;//the name of company4privateList<String> clerkList;//the clerk list56//companyName,clearList getter and setter method7........ 阅读全文
posted @ 2012-11-01 23:35 刺猬的温驯 阅读 (71) | 评论 (0) 编辑

摘要:在模块化Java系列文章的第4篇里,我们将介绍声明式模块化,描述如何定义组件并将它们组织在一起,而无需依赖于OSGi API进行编程。前一篇文章,《模块化Java: 动态模块化》描述了如何通过使用服务(service)给应用程序带来动态模块化特性。它们是通过输出的一个(或多个)可以在运行时被动态发现的接口而实现的。尽管这种方式使得client和server完全解耦,但是又带来一个如何(何时)启动服务的问题。启动顺序在彻头彻尾的动态系统里,服务不仅可以在系统运行的时候装卸,还可以以不同的顺序启动。有时,这是个大问题:无论A和B的启动顺序如何,在系统达到就绪状态并准备好接收事件之前,如果没有事件( 阅读全文
posted @ 2012-11-01 23:24 刺猬的温驯 阅读 (163) | 评论 (1) 编辑

摘要:本文是“模块化Java”系列文章的第三篇,我们将讨论动态模块化。内容涉及如何解析bundle类、bundle如何变化、以及bundle之间如何通信。在前一篇文章《模块化Java:静态模块化》中,我们讨论了如何构建Java模块并将其作为一个单独的JAR进行部署。文中的例子给出了一个client和一个server bundle(两者在同一个VM中),client通过工厂方法找到server。在该例子中,工厂实例化了一个已知类,当然也可以使用反射来获取一个服 务实现;Spring就是大量运用这种技术把spring对象绑定在一起的。在我们讨论动态服务之前,有必要回顾一下类路径,因为标准Java代码和模 阅读全文
posted @ 2012-11-01 23:19 刺猬的温驯 阅读 (163) | 评论 (0) 编辑

摘要:模块化是大型Java系统的一个重要特征。在这些项目中构建脚本和项目通常被划分为多个模块,以便改进构建过程,但是在运行时却很少考虑划分模块的问题。在“模块化Java”系列文章的第二篇里,我们将讨论静态模块化(static modularity)。内容包括如何创建bundle、将其安装到OSG引擎以及怎样建立bundle之间的版本依赖。在下一篇文章中,我们将讨论动态模块化(dynamic modularity)并展示bundle如何对其他bundle作出响应。在上篇文章《模块化Java简介》 中讲到,Java在开发时把package作为模块化单元,部署时把JAR文件作为模块化单元。可是尽管像Mav 阅读全文
posted @ 2012-11-01 23:17 刺猬的温驯 阅读 (150) | 评论 (0) 编辑

摘要:在过去几年,Java模块化一直是一个活跃的话题。从JSR 277(现已废止)到JSR 291,模块化看起来是Java进化过程中的必经一环。即便是基于JVM的未来语言,比如Scala,也考虑了模块化的问题。本文是关于模块化Java系列文章中的第一篇,讨论模块化的含义,以及为什么要关注它。什么是模块化?模块化是个一般概念,这一概念也适用于软件开发,可以让软件按模块单独开发,各模块通常都用一个标准化的接口来进行通信。实际上,除了规模大小有区别外,面向对象语言中对象之间的关注点分离与模块化的概念基本一致。通常,把系统划分外多个模块有助于将耦合减至最低,让代码维护更加简单。Java语言并不是按照模块化思 阅读全文
posted @ 2012-11-01 23:15 刺猬的温驯 阅读 (134) | 评论 (0) 编辑

摘要:输入输出是指应用程序与外部设备及其他计算机进行数据交流的操作,如读写硬盘数据、向显示器输出数据、通过网络读取其他节点的数据等。任何一种编程语言必须拥有输入输出的处理方式,Java语言也不例外。Java语言的输入输出数据是以流的形式出现的,并且Java提供了大量的类来对流进行操作,从而实现了输入输出功能。所谓流是指同一台计算机或网络中不同计算机之间有序运动着的数据序列,Java把这些不同来源和目标的数据都统一抽象为数据流。数据流可分为输入流和输出流,输入流代表从其他设备流入计算机的数据序列,输出流代表从计算机流向外部设备的数据序列。流序列中的数据可以是没有进行加工的原始数据(二进制字节数据),也 阅读全文
posted @ 2012-10-27 14:21 刺猬的温驯 阅读 (212) | 评论 (0) 编辑

摘要:转载http://www.itzhai.com/java-based-notebook-object-serialization-and-deserialization-of-its-implementation-and-use-of.html1、对象持久化:将一个对象保存到永久存储的设备上的机制。2、对象序列化(serialization):将对象转换为字节流保存起来是把一个对象的状态写入一个字节流的过程。在需要时还原此对象的机制。在一个对象图表中,如果试图序列化一个顶层的对象,所有其他引用的对象都被循环的定位和序列化。同样,在反序列化过程中,所有的这些对象以及他们的引用都被正确恢复。2.1 阅读全文
posted @ 2012-10-26 11:02 刺猬的温驯 阅读 (328) | 评论 (0) 编辑

摘要:转载http://www.itzhai.com/java-based-notebook-the-object-of-deep-and-shallow-copy-copy-copy-implement-the-cloneable-interface-serializing-deep-deep-copy.html深复制与浅复制:浅复制(deep clone):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。深复制(shallow clone):被复制对象的所有变量都含有与原来的对象相同的值,除去 阅读全文
posted @ 2012-10-26 10:55 刺猬的温驯 阅读 (101) | 评论 (0) 编辑

摘要:SingletonClient.getHttpClient().execute(post2,localContext);这里是采用httpclient组件提交http请求,需要导入相应的依赖<!--httpclient--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.2.1</version></dependency><de 阅读全文
posted @ 2012-10-25 12:59 刺猬的温驯 阅读 (929) | 评论 (0) 编辑

摘要:关于本系列本系列文章旨在将您的思维方式向函数式思维方式调整,使您以全新的角度来思考常见问题,并提高您的日常编码工作。本系列介绍了函数式编程概念,函数式编程在Java 语言中运行的框架、在JVM 上运行的函数式编程语言、以及语言设计未来的一些方向。本系列主要面向了解Java 以及其抽象层的工作方式,但缺乏函数式语言使用经验的开发人员。在本系列的第一期中,我首先讨论函数编程的一些特点,并演示如何在Java和其他函数语言中体现这些观念。在本文中,我将继续讨论这些概念,讲解一级函数、优化和闭包。但本期的内在主题是控制:什么时候想要控制、什么时候需要控制、什么时候应该放弃控制。一级(First-clas 阅读全文
posted @ 2012-10-14 21:15 刺猬的温驯 阅读 (89) | 评论 (0) 编辑

摘要:面向对象的编程通过封装可变动的部分来构造能够让人读懂的代码,函数式编程则是通过最大程度地减少可变动的部分来构造出可让人读懂的代码。— Michael Feathers,Working with Legacy Code一文的作者,这篇文章是通过微博发表的关于本系列本系列的目标是重新塑造您对函数式编程思想的看法,帮助您从新的角度看待常见问题,找到改​​进日常编码的途径。它探讨了函数式编程的概念,支持在Java 语言中进行函数式编程的框架,运行在JVM 上的函数式编程语言,以及语言设计的一些未来发展方向。本系列面向想了解Java 及其抽象工作、但在使用功能性语言方面经验很少或根本没有经验的开发人员。 阅读全文
posted @ 2012-10-14 20:54 刺猬的温驯 阅读 (92) | 评论 (0) 编辑

摘要:我将按照基类的顺序:InputStream、OutPutStream、Reader、Writer来分别对Java I/O加以总结。java中的流,简单理解就是管道里有流水,这个管道连接了程序和文件。InputStream、OutPutStream是字节输入流的所有类的超类。Reader、Writer是字符输入流的所有类的超类。Java IO流对象(其实大家都和懂啦,我这里再赘述一下)1.输入字节流InputStreamIO 中输入字节流的继承图可见上图,可以看出:InputStream 是所有的输入字节流的父类,它是一个抽象类。ByteArrayInputStream、StringBuffer 阅读全文
posted @ 2012-10-05 21:39 刺猬的温驯 阅读 (153) | 评论 (0) 编辑

摘要:转载http://blog.csdn.net/hust_is_lcd/article/details/7884320[-] 认识装饰器模式 装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式是通过... 阅读全文
posted @ 2012-10-05 21:17 刺猬的温驯 阅读 (199) | 评论 (0) 编辑

摘要:汉字转成拼音如果自己实现起来有点麻烦,主要是怕有些汉字转不了,所以就准备使用一个开源的工具Pinyin4j. pinyin4j是一个支持将中文转换到拼音的Java开源类库,pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制。pinyin4j的主页:http://pinyin4j.sourceforge.net/ 1. 支持简体中文和繁体中文字符; 2. 支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字; 3. 支持多音字,即可以获取一个中文字符的多种发音; 4. 支持多种字符串输出格式,比如支持Unicode格式的字符 阅读全文
posted @ 2012-09-15 17:43 刺猬的温驯 阅读 (227) | 评论 (0) 编辑

摘要:转载http://mabusyao.iteye.com/blog/618750首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的对象,每个线程创建一个,不是什么对象的拷贝或副本。通过 ThreadLocal.set()将这个新创建的对象的引用保存到各线 阅读全文
posted @ 2012-09-08 16:29 刺猬的温驯 阅读 (130) | 评论 (0) 编辑

摘要:在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限,下面看例子:package org.thread.demo;class MyThread extends Thread{ private String name; public MyThread(String name) { super(); this.name = name; } public void run(){ fo 阅读全文
posted @ 2012-09-07 15:25 刺猬的温驯 阅读 (91) | 评论 (0) 编辑

摘要:顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。使用场景To keep state with a thread (user-id, transaction-id, logging-id)To cache objects which you need frequentlyThreadLocal类它主要由四个方法组成initialValue(),get(),set(T),remove(),其中值得注意的 阅读全文
posted @ 2012-09-05 13:26 刺猬的温驯 阅读 (105) | 评论 (0) 编辑

摘要:前段时间我们的系统接到新增多一个频道的需求,原本我们的系统只是针对于广州的业务,现在需要新增另一个城市上海,经过和产品人员沟通和分析,城市之间的业务逻辑除了一些小差异基本还是一样的,数据库的结构经过整合两个城市也可以达到一样的结构,但上海需要独立出另一个数据库.我们以前发布器的做法是用作为方法的一个参数由调用者一直传到访问对象(索引或数据库),虽然这种做法一样可以很快的实现,但是将数据库,索引的选择和业务逻辑混搭在一起的设计在感觉上是比较混乱,并且不利于将来多个城市(频道)的建立,所以选了通过ThreadLocal来实现多数据源的动态切换.ThreadLocal 是一个依赖于执行线程的存储器, 阅读全文
posted @ 2012-09-05 13:20 刺猬的温驯 阅读 (381) | 评论 (0) 编辑

摘要:在利用Hibernate开发DAO模块时,我们和Session打的交道最多,所以如何合理的管理Session,避免Session的频繁创建和销毁,对于提高系统的性能来说是非常重要的。我们知道Session是由SessionFactory负责创建的,而SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一个SessionFactory并从中获取Session实例,那么Session是否是线程安全的呢?很遗憾,答案是否定的。Session中包含了数据库操作相关的状态信息,那么说如果多个线程同时使用一个Session实例进行CRUD,就很有可能导致数据存取的混乱,你能够想像那些 阅读全文
posted @ 2012-09-05 12:34 刺猬的温驯 阅读 (239) | 评论 (0) 编辑

摘要:概述 我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。 我们使用模板类访问底层数据,根据持久化技术的不同,模板类需要绑定数据连接或会话的资源。但这些资源本身是非线程安全的,也就是说它们不能在同一时刻被多个线程共享。 虽然模板类通过资源池获取数据连接或会话,但资源池本身解决的是数据连接或会话的缓存问题,并非数据连接或会话的线程安全问题。 按照传统经验,如果某个对象是非线程安全的,在多线程环境下,对对象的访问必须采用synchronized进行线程同步。但Spring的DAO模板类并 阅读全文
posted @ 2012-09-05 12:31 刺猬的温驯 阅读 (9502) | 评论 (0) 编辑

摘要:Listener Servlet的应用Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。ServletContextListener监听ServletContext。当创建ServletContext 阅读全文
posted @ 2012-09-04 14:21 刺猬的温驯 阅读 (671) | 评论 (0) 编辑

摘要:文本输出应该比较常用,以前都是通过反复的创建InputStream, InputReader, OutputStream, OutputWriter等去输入输出文本,比较麻烦。Apache提供了一个commons-io.jar包,里面有很多IO相关的工具,比如输入输出文本等,着实方便了很多。比如读取一个文件:Java代码//byFileUtilsList<String>lines=FileUtils.readLines(file,"UTF-8");//byIOUtilsList<String>lines=IOUtils.readLines(newFi 阅读全文
posted @ 2012-08-17 23:35 刺猬的温驯 阅读 (2095) | 评论 (0) 编辑

摘要:转载http://qihigh-hotmail-com.iteye.com/blog/1329696二进制的与、或、非运算特殊用法的不同运用场合:1.权限控制 下面我用几个数字来代表增,删,改,查。(注:1带有有权限,有几个1,就代表有几个权限,1的位置不同,所带表的权限也不同)Java代码1---------增--------(转二进制)-----(0001)2---------删----------------------(0010)4--------改----------------------(0100)8--------查----------------------(1000)管理员 阅读全文
posted @ 2012-08-12 12:21 刺猬的温驯 阅读 (454) | 评论 (0) 编辑

摘要:ThreadLocal是什么早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会 阅读全文
posted @ 2012-08-07 17:42 刺猬的温驯 阅读 (111) | 评论 (0) 编辑

摘要://Copyright2007Christiand'Heureuse,InventecInformatikAG,Zurich,Switzerland//www.source-code.biz,www.inventec.ch/chdh////Thismoduleismulti-licensedandmaybeusedundertheterms//ofanyofthefollowinglicenses:////EPL,EclipsePublicLicense,V1.0orlater,http://www.eclipse.org/legal//LGPL,GNULesserGeneralPub 阅读全文
posted @ 2012-08-02 21:51 刺猬的温驯 阅读 (324) | 评论 (0) 编辑

摘要:主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库1持久层:1)Hibernate这个不用介绍了,用的很频繁,用的比较多的是映射,包括继承映射和父子表映射对于DAO在这里介绍个在它基础上开发的包bba96,目前最新版本是bba96 2.0它对Hibernate进行了封装, 查询功能包括执行hsql或者sql查询/更新的方法,如果你要多层次逻辑的条件查询可以自己组装QueryObject.可以参考它做HibernateDAO.也可以直接利用它2) iBATIS另一个ORM工 阅读全文
posted @ 2012-07-22 11:26 刺猬的温驯 阅读 (137) | 评论 (0) 编辑

摘要:一般生成HTML页时,都会用比如freemarker等去搞,但今天看到和学到一个还应该不错的方法,是使用httpclient的get方法,去读某个动态的URL,然后把读出的内容再保存成HTML的,下面例子介绍一下:public class HtmlParser {HttpClient httpClient = null; //HttpClient实例GetMethod getMethod =null; //GetMethod实例BufferedWriter fw = null;String page = null;String webappname = null;BufferedReader 阅读全文
posted @ 2012-07-22 11:02 刺猬的温驯 阅读 (1617) | 评论 (0) 编辑

摘要:Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时. 阅读全文
posted @ 2012-06-18 18:15 刺猬的温驯 阅读 (100) | 评论 (0) 编辑

摘要:这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用java语言描述,其实都差不多的。要换成其他的语言主,自己转一下就可以了。为了方便起见,我们这里定义a^b为:a的b次方。这里,我们为每一个操作设定一个唯一的整数值,比如: 删除A---0 修改A---1 添加A---2 删除B---3 修改B---4 添加B---5 理论上可以有N个操作,这取决于你用于储存用户权限值的数据类型了。 这样,如果用户有权限:添加A---2;删除B---3;修改B---4。那用户的权限值 purview =2^2+2^3+2^4=28,也就是2的权的和了。化成二进制可以表示为11100。这样,如果要验证用.. 阅读全文
posted @ 2012-05-24 05:52 刺猬的温驯 阅读 (432) | 评论 (0) 编辑

摘要:Cygwin is a Unix-like environment for windows.It can be obtained from:www.cygwin.comBelow are notes on how to install and setup cygwin for access to group computers.Installation Notes:Download setup.exefromwww.cygwin.com.Run application from your local harddrive.Chose next on first screen.Select &qu 阅读全文
posted @ 2012-05-16 02:57 刺猬的温驯 阅读 (232) | 评论 (0) 编辑

摘要:1、序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保 存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)当你想用套接字在网络上传送对象的时候; c)当你想通过RMI传输对象的时候; 6、相关注意事项 a)序列化时,只对对象的状态进行保存,而不管对象的方法; b)当一个父类实现序列化,子类自动实现序列化,不需要显式实... 阅读全文
posted @ 2012-05-11 01:30 刺猬的温驯 阅读 (149) | 评论 (0) 编辑

摘要:用c++写成,可反编译class文件,支持jar包级的反编译,可将整个jar包直接保存为*.src.zip源代码包,反编译迅速,错误率极少,详细的看下面下载地址:http://java.decompiler.free.fr/?q=jdguiIntroductionThe aim of “Java Decompiler” project is to develop tools to decompile and analyze Java 5, and upper, “.class” files.JD-Core is a freeware library that reconstructs Java 阅读全文
posted @ 2012-05-10 04:38 刺猬的温驯 阅读 (197) | 评论 (0) 编辑

摘要:引子:前几天,小胖和我说他们公司CTO批他了,说他写的代码不够OO,不够DDD。细问才知道他们CTO在推DDD(领域模型驱动设计).我当时给他的观点是,JavaEE应用是天生贫血的,并不能像ruby之类的语言做到很好的富血,做到DDD。因为这些观点也是N年前讨论过的问题,我记得冒似robbin当年还下过定论:Java天生是贫血的。所以有了ruby之流做RAD快速开发。但当seam到spring roo的出现与完善,富血DDD在Java里也变得可行起来(此论言之尚早,拭目以待)。我以前也和别人争吵过哪个更好,现在我的思想又受到了一些冲击,你呢?世界在发展,我们的思想是不是也应该与时俱进呢?贫血v 阅读全文
posted @ 2012-05-10 02:47 刺猬的温驯 阅读 (375) | 评论 (0) 编辑

摘要:这是我一些常用的开发工具,主要用来做web开发,绝大部分都是开源的,这里做出一个列表并给出评论和网址,以后逐步充实完善本人Java初学者,水平实在有限,如有错误之处,请来信告知,感激不尽JDK说明:Java软件开发工具箱网址:http://java.sun.com相关资源推荐:必备Eclipse说明:目前最为流行的跨平台JAVA集成开发环境,扩展性极高,很多插件可用完全用Java开发,无需安装,方便平台的迁移我目前用的Eclipse已经维护了两年多,其间重装系统无数次,Eclipse的个人配置和插件却无需重装,非常方便网址:http://www.eclipse.org相关资源推荐:吐血推荐,都 阅读全文
posted @ 2012-04-24 22:15 刺猬的温驯 阅读 (362) | 评论 (0) 编辑

摘要:Java将数据于目的地及来源之间的流动抽象化为一个流(Stream),而流当中流动的则是位数据。14.2.1 InputStream和OutputStream计算机中实际上数据的流动是通过电路,而上面流动的则是电流,电流的电位有低位与高位,即数字的0与1位。从程序的观点来说,通常会将数据目的地(例如内存)与来源(例如文件)之间的数据流动抽象化为一个流(Stream),而其中流动的则是位数据,如图14-1所示。图14-1 数据的流动抽象化为流的概念在Java SE中有两个类用来作流的抽象表示:java.io.InputStream与java.io.OutputStream。InputStream 阅读全文
posted @ 2012-04-21 00:22 刺猬的温驯 阅读 (792) | 评论 (0) 编辑

摘要:内容介绍:本书于2004年3月18日获得2003年度Jolt效能大奖\r\n本书主要介绍了软件开发的原则和方法。本书直指编程前沿,透过日益增长的现代软件开发规范和技术,对软件开发的核心过程进行了审视——以满足用户为本,针对用户需求来产出高效、可维护的优秀代码。全书涵盖内容广博,从个人责任和职业发展,到保持代码灵活性并使之易于改动和重用,多而不杂。本书采用了有趣的轶事、详实的例子以及诙谐的对话等方式,描述了软件开发方方面面的最佳实践方案和各种缺陷...第1章注重实效的哲学A Pragmatic Philosophy·1我的源码让猫给吃了·2软件的熵·3石头汤与煮青蛙 阅读全文
posted @ 2012-04-20 17:48 刺猬的温驯 阅读 (490) | 评论 (0) 编辑

摘要:有些开发者因为曾有性能上的不快经验而拒绝采用对象关系映射(ORM)技术。和任何形式的抽象一样,使用ORM框架要以一些额外开销作为代价,但事实上,使用经过恰当调优的ORM和手写原生的数据访问代码在性能上还是有得一拼的。更为重要的是,使用好的ORM框架更容易调优和优化性能,手写原生数据访问代码在性能调优上则会困难得多。本文中的示例建立在Mindscape的LightSpeed ORM之上,我们将结合示例讨论常见的问题及其解决方案。N+1问题让我们来看看web应用程序中的过期订单列表,这有助于我们理解所要讨论的问题。假设我们不仅要查看订单,同时还要查看每个订单的客户信息,如果没做深入分析的话,我们也 阅读全文
posted @ 2012-04-16 03:16 刺猬的温驯 阅读 (438) | 评论 (0) 编辑

摘要:不做web开发多年了, 可偶尔去面试的时候, 还是会问道Struts实现mvc的细节。 很多东西都模糊了。 在网上找了下, 觉得这篇不错, 记下来防止以后用的着。 ‘ 分布式企业应用软件结构复杂、涉及多种技术,对设计开发人员提出了很高的要求。在此情况下,运用设计模式――可复用的设计方案进行软件的设计开发十分必要。MVC模式已被证明是一种成功的软件设计模式,本文主要讨论了一种实现MVC模式的应用框架――Struts,并通过一个实例展示了Struts框架实现MVC模式的方法。MVC设计模式 MVC(Modle-View-Controller,模型-视图-控制器)模式是Xerox PARC在20世纪 阅读全文
posted @ 2012-04-16 00:40 刺猬的温驯 阅读 (316) | 评论 (0) 编辑

摘要:Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西,我只是做了一个汇总整理。Commons BeanUtilshttp://jakarta.apache.org/commons/beanutils/index.html说明:针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装。使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是Bean Copy,也就是copy bean的属性。如果做分层架构开发的话就会用到,比 阅读全文
posted @ 2012-04-15 03:57 刺猬的温驯 阅读 (365) | 评论 (0) 编辑

摘要:StringUtils方法的操作对象是java.lang.String类型的对象,是对JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。除了构造器,StringUtils中一共有130多个方法,并且都是static的,所以我们可以这样调用StringUtils.xxx()下面分别对一些常用方法做简要介绍:1.public static boolean isEmpty(String str) 判断某字符串是否 阅读全文
posted @ 2012-04-08 21:24 刺猬的温驯 阅读 (113) | 评论 (0) 编辑

摘要:摘要每个web应用开发者一定组织视图组件,例如页首,正文体和页尾。有许多技术可以组织这些组件,但每个都有优缺点。这篇文章包括了7个可用的解决方案并让你了解Tiles框架和Struts框架的灵活性。从一个简单的说明组织视图组件的例子开始,然后使用JSP内建的机制,像include,彻底地解决问题。继续看其他的使用Tiles框架的替换方案,然后学会平衡Tiles框架和Struts框架的协作。(2,000个字;2002年1月4日)在Web应用软件开发中,一般用户界面负责站点的外观感觉,它可以让人产生真切的感受。通过界面的展现,来展示应用程序功能和导航。基于Servlet和JSP技术实现用户界面时,当 阅读全文
posted @ 2012-04-08 20:35 刺猬的温驯 阅读 (325) | 评论 (1) 编辑

摘要:package cn.itcast.util; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.h 阅读全文
posted @ 2012-03-31 02:28 刺猬的温驯 阅读 (1099) | 评论 (0) 编辑

摘要:ApacheCommons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。我选了一些比较常用的项目做简单介绍。文中用了很多网上现成的东西,我只是做了一个汇总整理。一、Commons BeanUtilshttp://jakarta.apache.org/commons/beanutils/index.html说明:针对Bean的一个工具集。由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装。使用示例:功能有很多,网站上有详细介绍。一个比较常用的功能是Bean Copy,也就是copy bean的属性。如果做分层架构开发的话就会用到, 阅读全文
posted @ 2012-03-30 20:33 刺猬的温驯 阅读 (160) | 评论 (0) 编辑

摘要:stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Outstream)都包括两种类型:(1)字节流 表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。(2)字符流以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。区别:Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的 阅读全文
posted @ 2012-01-26 15:00 刺猬的温驯 阅读 (3133) | 评论 (1) 编辑